본문 바로가기

Database/MySQL

mysql auto increment 를 포함한 테이블에서 pk 생성시 주의점

mysql에서 dump 한 ddl 을 그대로 적용하려는데 오류가 발생했다.

해당 테이블은 auto increment 컬럼을 가지고 있었는데 ddl 문은 다음과 같았다.

ddl

create table t1(
    seq bigint(20) not null auto_increment,
    pk1 int,
    pk2 int,
    primary key( pk1, pk2 )
);

실행결과

mysql> create table t1(
    -> seq bigint(20) not null auto_increment,
    -> pk1 int,
    -> pk2 int,
    -> primary key( pk1, pk2 )
    -> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
mysql> 

오류메시지대로 auto increment 컬럼은 한개여야 하고 반듯이 pk 에 포함되어야 한다는 말이다. mysqlpump 를 통해 dump 를 받은 ddl 이기에 처음에는 살짝 당황했는데 어떻게든 만들었다는 말인데...

workaround

일단 workaround 로 다음처럼 생성은 가능하다.

mysql> 
mysql> create table t1(
    -> seq bigint(20) not null,
    -> pk1 int,
    -> pk2 int,
    -> primary key( pk1, pk2 )
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> alter table t1 add unique index( seq );
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table t1 change seq seq bigint(20) not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table t1 auto_increment=1;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into t1(pk1,pk2) values( 1,1 );
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+-----+-----+-----+
| seq | pk1 | pk2 |
+-----+-----+-----+
|   1 |   1 |   1 |
+-----+-----+-----+
1 row in set (0.00 sec)

mysql> 

궁금중

workaround 처럼 alter 문으로 해결이 된다면 애초에 왜 오류를 발생시키게끔 만들었는지 좀 의문의 듬

그냥 처음부터 pk 는 pk 로, auto increment 를 secondary index 로 분류해서 생성하면 되는거 같은데...