在 SQLite3 中插入后检索自动增量列
Retrieving autoincrement column after insert in SQLite3
我在 SQLite3 中有一个具有以下架构的 table:
create table threads(
id integer primary key autoincrement,
submitter text,
body text,
title text,
subtime int -- Unix time
);
我正在插入这样的行:
insert into threads (title, body, subtime, submitter) values
("I like ducks", "Don't you?", 1467664977640, "tom");
我想在插入线程后获取 id 列。我怎样才能做到这一点?理想情况下,我可以在同一语句中插入和检索列。
我不知道你是否可以在一条语句中做到这一点,但在插入语句之后你可以立即使用以下语句来获取最后一个自动递增的 id:
SELECT last_insert_rowid()
另一种方法是使用下面的语句:
select seq from sqlite_sequence where name="threads"
Result interface 允许您访问此值而无需执行另一个查询:
res, err := db.Exec("INSERT ..."), someParam)
if err != nil {
println("Exec err:", err.Error())
} else {
id, err := res.LastInsertId()
if err != nil {
println("Error:", err.Error())
} else {
println("LastInsertId:", id)
}
}
我在 SQLite3 中有一个具有以下架构的 table:
create table threads(
id integer primary key autoincrement,
submitter text,
body text,
title text,
subtime int -- Unix time
);
我正在插入这样的行:
insert into threads (title, body, subtime, submitter) values
("I like ducks", "Don't you?", 1467664977640, "tom");
我想在插入线程后获取 id 列。我怎样才能做到这一点?理想情况下,我可以在同一语句中插入和检索列。
我不知道你是否可以在一条语句中做到这一点,但在插入语句之后你可以立即使用以下语句来获取最后一个自动递增的 id:
SELECT last_insert_rowid()
另一种方法是使用下面的语句:
select seq from sqlite_sequence where name="threads"
Result interface 允许您访问此值而无需执行另一个查询:
res, err := db.Exec("INSERT ..."), someParam)
if err != nil {
println("Exec err:", err.Error())
} else {
id, err := res.LastInsertId()
if err != nil {
println("Error:", err.Error())
} else {
println("LastInsertId:", id)
}
}