【发布时间】:2016-09-05 08:25:09
【问题描述】:
问题摘要:使用 MySQL 和 SQLite,在具有 AUTOINCREMENT 的表上失败的INSERT OR IGNORE 仍然增加自动增量值。此处已对此进行了讨论:INSERT IGNORE increases auto increment counter even no record is added?
我的问题:99% 插入失败的表最终会产生巨大的索引号,例如记录 1500 的索引为 165200。
这是不切实际的,所以我正在寻找一种方法来对抗这种行为。
由于INSERT OR IGNORE 应该与INSERT ON CONFLICT IGNORE 相同,所以我想到了使用INSERT ON CONFLICT FAIL 或INSERT ON CONFLICT ABORT。
我的问题是我以这种方式从SELECT 插入:
INSERT OR IGNORE INTO t1 (x,y,z,) SELECT * FROM t2
此语法不接受ON CONFLICT FAIL。 这两个都没有:
INSERT ON CONFLICT FAIL INTO t1 (x,y,z,) SELECT * FROM t2
INSERT INTO t1 (x,y,z,) SELECT * FROM t2 ON CONFLICT FAIL
有什么想法或提示吗?
【问题讨论】:
标签: mysql sql sqlite auto-increment