有以下两个表格:
create table lol(id int auto_increment, data int, primary key id(id));
create table lol2(id int auto_increment, data int, primary key id(id));
插入一些值:
insert into lol2 (data) values (1),(2),(3),(4);
现在使用select:
插入insert into lol (data) select data from lol2;
再做一次:
insert into lol (data) select data from lol2;
现在看一下表:
select * from lol;
我收到:
+----+------+
| id | data |
+----+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 8 | 1 |
| 9 | 2 |
| 10 | 3 |
| 11 | 4 |
+----+------+
我对4和8之间的差距感到困惑......是什么造成了这种情况,我怎么能这样做,以便没有差距?非常感谢!
答案 0 :(得分:0)
auto_increment不保证ID列中的增量为1。它不能,因为只要你处理并行事务,它就会破坏:
BEGIN BEGIN
INSERT INTO lol VALUES(...) INSERT INTO lol VALUES(..)
... ...
COMMIT ROLLBACK
数据库应分配哪些ID?它无法事先知道哪个事务会成功,哪些事务将被回滚。
如果您需要对记录进行连续编号,则可以使用返回该记录的查询; e.g。
SELECT COUNT(*) as position, lol.data FROM lol
INNER JOIN lol2 ON lol.id < lol2.id
GROUP BY lol.id