我有一个表格,其中字段ID
是自动递增的INTEGER PRIMARY KEY
。如果ID
要在下一个n
上自动递增到某个整数值INSERT
,如何在n
语句中访问值INSERT
?
特别是,我有时希望使用否定 ID
来初始化一行,即ID = -n
(原因是除了主键之外我还使用ID
作为布尔标志,因此我不必为标志创建单独的字段。)
答案 0 :(得分:1)
你做不到。行ID生成仅在以后启动,而不是在评估SQL中的表达式时启动。有last_insert_rowid()
但没有current_insert_rowid()
。
此外,重载rowid以包含标识符之外的其他信息似乎不是一个好主意。只需使用其他列来获取更多信息。
答案 1 :(得分:0)
正如laalto所说,你无法访问AUTOINCREMENT的下一个值,但如果你真的需要它,那就有一个解决方法。请注意,这不是一种最佳的处理方式,它不是线程安全的,所以除非你真的需要它,否则不要使用它。
鉴于SQLite中对“INTEGER PRIMARY KEY”的特殊处理,我们可以使用:
SELECT max(the_column) + 1 FROM table;
然后使用返回值并在为PK列执行INSERT时显式地将其放入。
请注意,这与使用AUTOINCREMENT机制本身不同。 AUTOINCREMENT将始终递增id,而我们的“解决方法”将始终使用最大值,如果删除所有行,它将从0开始,而AUTOINCREMENT将继续使用它离开的数字。
重新认识 - 这是一种解决方法,不要使用它,除非你真的知道你正在做什么而你仍然需要它。