Sqlite INSERT或REPLACE正在递增行ID



我使用INSERT OR REPLACE语法插入或更新表中基于唯一列约束可能存在的行。

表格结构为

| Name | Age | CustomerId (unique) | 

当我第一次打印出表格时,我得到了类似的东西

| Name | Age | CustomerId | rowid |
|"Bob" | 22  | 5          | 1     |

然后我运行INSERT OR REPLACE INTO MyTable(Name, Age, CustomerId) VALUES ("Bob", 23, 5);"

毫无疑问,每次运行rowid列时,它都会递增。所以现在的结果是

| Name | Age | CustomerId | rowid |
|"Bob" | 23  | 5          | 2     |

如何防止rowid递增?

INSERT OR REPLACE就是这样工作的
如果发生违反唯一索引/约束的情况,则会删除现有行并插入新行,因此会为新行分配一个新的rowid

如果你不想发生这种情况,你必须使用UPSERT:

insert into tablename(Name, Age, CustomerId) values ('Bob', 23, 5)
on conflict(CustomerId) do update 
set Name = excluded.Name,
Age = excluded.Age;

请参阅演示

最新更新