我使用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;
请参阅演示