返回sqlite中已删除的行

iezvtpos  于 2022-12-13  发布在  SQLite
关注(0)|答案(3)|浏览(245)

先执行SELECT * FROM TABLE WHERE clause,然后执行DELETE * FROM TABLE WHERE clause这样的两个查询效率不高。
因此,我想进行DELETE查询并返回删除的行(一个查询)。
我竭力做到:

DELETE OUTPUT DELETED.*
FROM table
WHERE clause

但我有一个错误:

SQLite exception: near "OUTPUT": syntax error

如何使它正确或也许有另一种替代方法返回已删除的行?

0dxa2lsx

0dxa2lsx1#

DELETE statement没有OUTPUT子句。
在执行SELECT之后,所有重要的数据都该高速缓存中,因此DELETE将快速运行。
因为SELECT加DELETE是 * 唯一 * 的方式,所以它是 * 最有效 * 的方式。
从3.35版本开始,SQLite有RETURNING clause

2izufjch

2izufjch2#

可以返回使用returning子句删除的记录

delete from myTable returning *
z9zf31ra

z9zf31ra3#

可以在DELETE查询之后使用changes()调用:https://www.sqlite.org/c3ref/changes.html
实现方式会因所用语言的不同而有所不同。例如,在PHP中,您可以编写:

$sqlite = new SQLite3('database.sqlite');
$statement = $sqlite->prepare('DELETE FROM mytable WHERE myclause');
$statement->execute();
echo $sqlite->changes();

相关问题