Database/MySQL
mysql auto increment 를 포함한 테이블에서 pk 생성시 주의점
크라우도
2020. 3. 25. 00:01
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 로 분류해서 생성하면 되는거 같은데...