在 MariaDB 中更新后返回行

Ave*_*yan 4 sql mariadb sql-update

如何在 UPDATE、INSERT 之后返回整行或部分行。

这是我的查询。

 UPDATE news SET title = 'changed' WHERE ID = 8 RETURNING *
Run Code Online (Sandbox Code Playgroud)

它返回语法错误。

#1064 - 你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解'RETURNING *'在第 1 行附近使用的正确语法

我想获取受影响的行数据。

gri*_*riv 5

MariaDB 和 MySQL 通常不支持RETURNING语句后的子句UPDATE

您必须在语句之后直接在单独的语句中返回更新的行,UPDATE如下所示:

UPDATE news SET title = 'changed' WHERE ID = 8;
SELECT * FROM news WHERE ID = 8;
Run Code Online (Sandbox Code Playgroud)

或者使用LAST_INSERT_ID(), 如果您正在执行INSERT, 则基于您的连接(不过,在 MariaDB 中RETURNING允许INSERT- 见下文)。

INSERT INTO news (ID, title) VALUES (8, 'aaa');    
SELECT LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

从上一个问题中了解更多相关信息:return the Updated value after running the update query in mysql

但是,它确实支持or语句RETURNING之后的行(如果您使用的是 10.5 及更高版本),如下所示:INSERTREPLACE

INSERT INTO news (ID, title) values (8, 'aaa') RETURNING *;
Run Code Online (Sandbox Code Playgroud)
REPLACE INTO news VALUES (8,'changed') RETURNING *;
Run Code Online (Sandbox Code Playgroud)

在这里摆弄。

在 MariaDB 文档中了解更多相关信息:REPLACE...RETURNING