[테스트 환경]
- Windows 7
- MariaDB 10.1.12
1. AUTO_INCRMENT컬럼의 PK 활용 방법
- 오라클의 SEQUENCE는 테이블에 종속되지 않고 사용 할수 있는 반면 MariaDB(Mysql)는 테이블 종속적으로 SEQUENCE처럼 사용 가능한 AUTO_INCREMENT 기능이 존재 한다. 오늘은 AUTO_INCREMENT를 활용하여 PK를 구성방법에 대해서 얘기하려고 한다.
1.1. AUTO_INCREMENT컬럼 단일 PK
- AUTO_INCREMENT컬럼을 사용하여 단일 PK를 구성하는 것은 전혀 문제가 없음
CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(11) NOT NULL, DA_NM VARCHAR(20) , PRIMARY KEY(DA_NO) /*AUTO_INCREMENT컬럼 단일 PK */ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
1.2. AUTO_INCREMENT컬럼이 선행컬럼으로 복합 PK
- AUTO_INCREMENT컬럼이 선행컬럼으로 복합 PK를 구성하는 것도 전혀 문제가 없음
CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(11) NOT NULL, DA_NM VARCHAR(20) , PRIMARY KEY(DA_NO,DA_ID) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
1.3. AUTO_INCREMENT컬럼을 제외한 단일 PK
- AUTO_INCREMENT컬럼을 제외하고 PK컬럼을 구성하려고 할때 에러 발생.
CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(11) NOT NULL, DA_NM VARCHAR(20) , PRIMARY KEY(DA_ID,DA_NO) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; /* 에러 발생 : Incorrect table definition; there can be only one auto column and it must be defined as a key */
1.4. AUTO_INCREMENT컬럼이 후행컬럼으로 복합 PK
- AUTO_INCREMENT컬럼을 후행컬럼으로 PK컬럼을 구성하려고 할때 에러 발생.
CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(11) NOT NULL, DA_NM VARCHAR(20) , PRIMARY KEY(DA_ID,DA_NO) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; /* 에러 발생 : Incorrect table definition; there can be only one auto column and it must be defined as a key */
1.5. AUTO_INCREMENT컬럼 후행컬럼으로 결합 PK + AUTO INCREMENT컬럼 UNIQUE인덱스 추가
- AUTO_INCREMENT컬럼에 UNIQUE인덱스를 생성함으로써 PK구성의 제약조건이 해결됨
CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(11) NOT NULL, DA_NM VARCHAR(20) , PRIMARY KEY(DA_ID,DA_NO), UNIQUE KEY DA_AUTO_INCREMENT_TEST_IDX01(DA_NO) /*핵심*/ ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
1.6. AUTO_INCREMENT컬럼을 제외한 단일 PK + AUTO INCREMENT컬럼 UNIQUE인덱스 추가
- AUTO_INCREMENT컬럼에 UNIQUE인덱스를 생성함으로써 PK구성의 제약조건이 해결됨
CREATE TABLE DA_AUTO_INCREMENT_TEST( DA_NO int(11) NOT NULL AUTO_INCREMENT, DA_ID VARCHAR(11) NOT NULL, DA_NM VARCHAR(20) , PRIMARY KEY(DA_ID), UNIQUE KEY DA_AUTO_INCREMENT_TEST_IDX01(DA_NO) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2. 결론
- AUTO_INCREMENT컬럼은 UNIQUE KEY로 생성 될 경우, 결합 PK의 후행컬럼으로 생성되거나 PK에서 제외 되어도 상관 없다.
- 단, 결합PK에서 선행컬럼으로 구성 할 때는 별도의 UNIQUE인덱스가 필요 없는데, 결합PK에서 후행컬럼으로 구성 할 때는 필요하다. 데이터의 유일성 때문에라면 선행이든 후행이든 모두 UNIQUE 인덱스가 필요 할 것인데 좀 더 확인이 필요 하다.
'MariaDB > Admin' 카테고리의 다른 글
[에러] ERROR 1932 (42S02): Table [테이블명] doesn't exist in engine (0) | 2017.09.26 |
---|---|
[MariaDB][ADMIN] show processlist - Waiting for table metadata lock (0) | 2017.03.29 |
[MariaDB][운영] CentOS7에서 logrodate로 로그 파일이 rotation되지 않을 경우 (0) | 2016.08.09 |
[MariaDB][Admin] DB 생성 과 테이블 조작(DDL, DML) (0) | 2016.08.07 |
레플리케이션 (0) | 2015.10.27 |