DBレプリケーションのテストで大量のデータをINSERTする際、オートインクリメント設定されてないのにUNIQUE制約がかかっているカラムがあったのでこう解決した。
TABLE_NAME:example
column_name | auto_increment | info |
---|---|---|
id | yes | pk |
code | no | non_unique |
下記SQLをshellでループして実行させている。
examle_insert.sql
INSERT INTO example VALUES(
null,
(SELECT max_val FROM (SELECT max(code) + 1 AS max_val FROM example) AS tmp)
);
また、文字列を含むコードをいれなきゃいけないケースはこうやった。別に減算じゃなくてもいいと思う。
examle_insert.sql
INSERT INTO example VALUES(
null,
(SELECT 'E' || max_val FROM (SELECT 99999999 - max(id) AS max_val FROM example) AS tmp)
);