본문 바로가기

MySQL/MySQL Tip & Tech

(10)
[MySQL] VALUES - keyword, function & statement Keyword 로서의 VALUES INSERT 문에서 삽입할 값을 나열할 때 VALUES 를 사용합니다. 이 때의 VALUES는 keyword 입니다. INSERT INTO table_name (col1, col2, col3) VALUES ('value1', 'value2', 'value3'); Function 으로서의 VALUES() 일반적인 INSERT … ON DUPLICATE KEY UPDATE 문은 아래와 같습니다. INSERT INTO table_name (id, col1, col2) VALUES ('key_value', 'value1', 'value2') -- VALUE keyword ON DUPLICATE KEY UPDATE col1 = 'value1' , col2 = 'value2'; 여..
[MySQL] 사용자 로그 테이블 - (3) 자동화된 파티션 관리 [MySQL] 사용자 로그 테이블 - (1) Primary Key가 필요한가? [MySQL] 사용자 로그 테이블 - (2) 파티션 관리 [MySQL] 사용자 로그 테이블 - (3) 자동화된 파티션 관리 이전 글들에서 사용자 로그 테이블을 설계할 때 Key에 대해 고려할 점과 파티션을 적용하고 관리하는 방법을 소개했습니다. 이 글에서는 사용자 로그 테이블에 daily 파티션을 생성, 추가 및 삭제하는 일련의 작업을 자동으로 처리하는 방법에 대해 살펴 봅니다. 개요 관리 대상 테이블을 지정하고 로그의 보관 기간을 설정하는 방법 `log_retention` 테이블을 생성하고 다음의 내용을 저장 사용자 로그 테이블의 이름 파티션 키로 사용하는 날짜 컬럼의 이름 로그 보관 기간 파티션 관리 Stored Proce..
[MySQL] 사용자 로그 테이블 - (2) 파티션 관리 [MySQL] 사용자 로그 테이블 - (1) Primary Key가 필요한가?[MySQL] 사용자 로그 테이블 - (2) 파티션 관리[MySQL] 사용자 로그 테이블 - (3) 자동화된 파티션 관리 이 글에서는 로그 테이블의 Daily 파티션을 관리하는 일반적인 방법을 소개합니다. 파티션 추가하기현재 `sample_log` 테이블에 3개의 파티션이 있다고 가정하겠습니다. 123SELECT PARTITION_NAME, PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_DESCRIPTIONFROM information_schema.PARTITIONSWHERE TABLE_NAME = 'sample_log';Colored by Color Scriptercs (결과) 로그 ..
[MySQL] 사용자 로그 테이블 - (1) Primary Key가 필요한가? [MySQL] 사용자 로그 테이블 - (1) Primary Key가 필요한가?[MySQL] 사용자 로그 테이블 - (2) 파티션 관리[MySQL] 사용자 로그 테이블 - (3) 자동화된 파티션 관리 로그 테이블과 Primary Key InnoDB 에 대한 몇 가지 사실을 열거해 봅시다. Primary Key는 항상 Clustered Index 이다.Primary Key가 없다면 다음 우선 순위에 따라 Clustered Index가 선택된다. 즉, Clustered Index가 없는 테이블은 존재하지 않는다.NOT NULL 속성의 Unique Key (= Unique Index)후보가 없다면, 보이지 않는 컬럼을 내부적으로 추가하여 사용auto_increment 속성의 컬럼은 반드시 단일 Key 또는 복합..
[MySQL] 5.7에서 JSON 을 JSON_TABLE() 함수 없이 테이블로 변환하기 MySQL 8.0.4 이후 버전에서는 JSON_TABLE() 함수를 FROM 절에서 사용할 수 있습니다. JSON_TABLE() 문법12345678910111213141516171819JSON_TABLE( expr, path COLUMNS (column_list)) [AS] alias column_list: column[, column][, ...] column: name FOR ORDINALITY | name type PATH string path [on_error] [on_empty] | name type EXISTS PATH string path | NESTED [PATH] path COLUMNS (column_list) on_error: {NULL | ERROR | DEFAULT json_stri..
[MySQL] 명명 규칙 (Naming Convention) 공통 소문자를 사용합니다. 축약어의 사용을 최소화합니다. 축약어를 사용하는 경우에도 소문자를 사용합니다. 테이블 snake_case를 사용합니다. 복수형 명사를 사용합니다. many-to-many 관계에 사용하는 교차 테이블 적절한 명사가 없다면 두 테이블을 and로 연결합니다. movies 테이블과 genres 테이블 사이의 교차 테이블 ⇒ movies_and_genres 컬럼 snake_case를 사용합니다. 특별한 이유가 없다면 Auto Increment 속성의 대체키 (Surrogate Key)를 Primary Key로 사용하고, 컬럼의 이름은 “테이블 이름의 단수형” + “_id” 형식으로 합니다. movies 테이블의 PK 컬럼: movie_id 참조 관계에서 자식 테이블의 Foreign Ke..
[MySQL] 가장 가까운 시설물 조회 - 두 좌표 (위도, 경도) 사이 거리 계산 보통 위도와 경도로 표현된 두 좌표 간의 거리를 계산할 때 Haversine 수식을 사용합니다. 하지만, 이 글에서는 MySQL 5.7.6 이상에서 사용할 수 있는 Spatial 함수로 문제를 풀어봅니다. 예제로 사용할 테이블은 아래와 같습니다. 12345678910CREATE TABLE library_in_seoul ( seq int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT '고유번호' , fclty_nm varchar(50) NOT NULL COMMENT '시설명' , gu_nm varchar(10) NOT NULL COMMENT '구명' , neadres_nm varchar(100) NOT NULL COMMENT '새주소명' , fclty_loc..
[MySQL] Materialized Path를 사용한 계층형 모델 Graph 구조 중 가장 단순하면서 흔히 사용되는 것이 Hierarchy, 즉 계층형 구조입니다. 이런 곳에 사용하죠. 계층형 게시판 카테고리 조직도 폴더 Tree 추천인 Tree 먼저 기본 설계를 설명하고 다음으로 Materialized Path를 어떻게 적용할 수 있는 지 알아보겠습니다. 1. 계층형 설계의 기본 : Adjacency List 자신의 매니저를 `employee` 테이블에서 재귀 참조하는 예입니다. 정규화된 간결한 구조인데요. 이런 계층형 설계를 Adjacency List 라고 합니다. 그럼 테이블을 생성하고, 테스트 데이터를 입력해 봅니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE DATABASE `graph_test` DEFAULT CHARACTER S..