INSERT INTO错误后的LAST_INSERT_ID()

时间:2012-02-09 07:30:55

标签: php mysql

我遇到了LAST_INSERT_ID()(或php上的mysql_insert_id)和带有两个参数的表的问题(对于此示例)。 ID:自动增量值 TEXT:varchar唯一字段。

如果我有这个:

INSERT INTO field (text) VALUES ('a');  -> Insert OK
SELECT LAST_INSERT_ID(); -> ok, returns 1;
INSERT INTO field (text) VALUES ('a');  -> Insert Error (text field is UNIQUE)
INSERT INTO field (text) VALUES ('b');  -> Insert Ok
SELECT LAST_INSERT_ID(); -> ok, but returns 3, not 2

自动增量字段不相关,并跳过2值。 我尝试使用START TRANSACTION和ROLLBACK或COMMIT,但我遇到了同样的问题(或者,我没有正确地做到这一点)。

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:4)

不,增量ID并不总是MAX + 1,如果按顺序删除先前的记录,它们也不会重新洗牌。如果您的增量ID序列中存在间隙,则无关紧要:如果您正确使用增量ID作为唯一标识符,那么这不是问题。如果您依赖于连续序列,那么您没有正确设计数据库。