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 로 분류해서 생성하면 되는거 같은데...
'Database > MySQL' 카테고리의 다른 글
replication 관련 명령어 모음 (1) | 2020.05.07 |
---|---|
ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist (0) | 2020.05.07 |
RDS MySQL 로 Procedure 이관 (0) | 2020.03.25 |
binary log file position based replication (0) | 2019.08.23 |
SYSBENCH 를 이용하여 RDS MySQL, RDS Aurora, GCP Cloud SQL MySQL OLTP 테스트 2차 (0) | 2019.07.12 |