SQLite last_insert_rowid() 函数使用指南

SQLite last_insert_rowid() 函数返回从当前调用此函数的连接中插入到数据库的最后一行的 ROWID。

ROWID 是表中的行的唯一标识,它是一个 64 位的整数值。您可以使用不区分大小写的 rowid, oid 或者 _rowid_ 获取到行的 ROWID。除非该表中有显式定义的上述名称的列。

如果一个表中有 INTEGER PRIMARY KEY 列,则该列变成 ROWID 的别名。

last_insert_rowid() 语法

这里是 SQLite last_insert_rowid() 函数的语法:

last_insert_rowid()

参数

SQLite changes() 函数不需要任何参数。

返回值

SQLite last_insert_rowid() 函数返回从当前连接中最后查到数据库中的一行的 ROWID,它是一个 64 位整数值。

last_insert_rowid() 实例

隐式的 ROWID 列

为了演示 SQLite last_insert_rowid() 函数的作用,我们使用以下语句创建一个表 test_last_insert_rowid

CREATE TABLE test_last_insert_rowid (
  txt VARCHAR(100)
);

让我们使用下面的语句插入 2 行,

INSERT INTO test_last_insert_rowid
VALUES ('Hello'), ('World');

让我们使用 SELECT 语句查看一下表中的数据:

SELECT * FROM test_last_insert_rowid;
txt
-----
Hello
World

由于每个表都有一个默认的 rowid,因此我们使用以下语句可以显示 rowid 列:

SELECT rowid, * FROM test_last_insert_rowid;
rowid  txt
-----  -----
1      Hello
2      World

让我们使用 SQLite last_insert_rowid() 函数获取最新的 ROWID:

SELECT last_insert_rowid();
last_insert_rowid()
-------------------
2

这与我们在上面看到的结果一样。

显式的 ROWID 列

如果一个表中有 INTEGER PRIMARY KEY 列,则该列变成 ROWID 的别名。比如,我们使用以下语句创建表 test_last_insert_rowid_2

CREATE TABLE test_last_insert_rowid_2 (
  id INTEGER PRIMARY KEY,
  txt VARCHAR(100)
);

这里,我们使用了 id 列作为主键。按照上面所描述的, idrowid 的别名。

让我们插入两行数据:

INSERT INTO test_last_insert_rowid_2 (txt)
VALUES ('Hello'), ('World');

要查看表中行和每行的 ROWID,请使用以下语句:

SELECT rowid, * FROM test_last_insert_rowid_2;
id  id  txt
--  --  -----
1   1   Hello
2   2   World

这里, 输出的列名使用了 rowid 列的别名 id

您可以使用一个自定义的 id, 比如:

INSERT INTO test_last_insert_rowid_2 (id, txt)
VALUES (123, 'Hello');

要查看最后插入的一行的 ROWID, 请使用以下带有 SQLite last_insert_rowid() 函数的 SELECT 语句:

SELECT last_insert_rowid();
last_insert_rowid()
-------------------
123

它正是我们刚刚在 INSERT 语句中使用的值。