SQLite - 如何访问INSERT上的AUTOINCREMENT值?

时间:2014-01-27 06:23:22

标签: sqlite auto-increment

我有一个表格,其中字段ID是自动递增的INTEGER PRIMARY KEY。如果ID要在下一个n上自动递增到某个整数值INSERT,如何在n语句中访问值INSERT

特别是,我有时希望使用否定 ID来初始化一行,即ID = -n (原因是除了主键之外我还使用ID作为布尔标志,因此我不必为标志创建单独的字段。)

2 个答案:

答案 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将继续使用它离开的数字。

重新认识 - 这是一种解决方法,不要使用它,除非你真的知道你正在做什么而你仍然需要它。