我期望sqlite會丟棄已使用和回滾(ed)的PK值,但不會發生這種情況。這裏是測試:sqlite在回滾後重復主鍵自動增量值
PRAGMA foreign_keys = ON;
BEGIN TRANSACTION;
INSERT INTO _UIDlgt (id, TS) VALUES (null, '1421248181');
select max(id) from _UIDlgt; -- shows 6 ok, there were previous records
ROLLBACK;
select max(id) from _UIDlgt; -- shows 5 ok, was previous max value
INSERT INTO _UIDlgt (id, TS) VALUES (null, '1421248181');
select max(id) from _UIDlgt; -- shows 6 I expect 7 !!!!
這是創建表:
CREATE TABLE _UIDlgt (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
TS INTEGER NOT NULL
);
手冊says未能插入跳過的PK值嘗試使用,但注意到有關回滾。
現在的問題是:有沒有一些設置來管理這種行爲?還是個詭計?
Ms Sql Server按我期望的方式工作。 Sqlite版本是PHP 5.4.11下的3.7.7.1
回滾將刪除所有掛起的寫入操作,並且自動增量是對特殊「sqlite_sequence」表的寫入操作。因此,它的值更改僅適用於提交。 – keltar