- 가끔 분산 DB, DB통합 등을 고려해서 auto inc가 아니라 uuid 등으로 PK를 생성해야하는 경우가 존재
- 이때 몇가지를 고려해서 코드레벨에서 준비해야하는게 있었는데, mysql 8기준으로 이제는 native function에서 지원이 잘됨
관련해서 잘 정리된 글이 있어서 메모 목적으로 링크
핵심 부분은 'UUID_TO_BIN(UUID(),1)' 를 이용해서 uuid ver 1으로 생성된 uuid에서, 시간 관련된 필드를 조정 & 저장 용량을 줄이기 위해서 BINARY(16)로 저장
- Clustered Index를 사용하는 Mysql이 index 조정 오버헤드를 줄이기 위해서
-- 테이블 생성 : UUID_TO_BIN(UUID(),1)
create table tb_test3 (
uuid binary(16) default (UUID_TO_BIN(UUID(),1)) primary key,
first_name varchar(15), emp_no int unsigned)
engine=innodb default charset=utf8mb4 collate=utf8mb4_general_ci;
-- 데이터 입력
insert into tb_test3(first_name,emp_no) values ('Georgi',10001);
insert into tb_test3(first_name,emp_no) values ('Mary',10002);
insert into tb_test3(first_name,emp_no) values ('Saniya',10003);
insert into tb_test3(first_name,emp_no) values ('Sumant',10004);
insert into tb_test3(first_name,emp_no) values ('Duangkaew',10005);
insert into tb_test3(first_name,emp_no) values ('Patricio',10006);
-- 데이터 조회
mysql> select hex(uuid),first_name,emp_no
from tb_test3;
+----------------------------------+------------+--------+
| hex(uuid) | first_name | emp_no |
+----------------------------------+------------+--------+
| 11ED4F5A366CD3C3A20708002722A50F | Georgi | 10001 |
| 11ED4F5A89BD4D38A20708002722A50F | Mary | 10002 |
| 11ED4F5A8ED8C0C8A20708002722A50F | Saniya | 10003 |
| 11ED4F5C16AAD10DA20708002722A50F | Sumant | 10004 |
| 11ED4F5D5B56C1E8A20708002722A50F | Duangkaew | 10005 |
| 11ED4F5E2CDE8B13A20708002722A50F | Patricio | 10006 |
+----------------------------------+------------+--------+
'DB > Mysql' 카테고리의 다른 글
mysql 8.x 설치 방법 간략한 정리 (0) | 2023.08.23 |
---|---|
글로벌 서비스 개발시, Mysql 날짜/시간에 처리를 위한 데이터타입 확인 (0) | 2021.11.17 |
Mysql n-gram을 이용한 검색 (2) | 2021.08.26 |
Mysql full text 검색(전문 검색) 정리 (0) | 2019.05.06 |
Mysql rules(with java) (0) | 2018.12.28 |