You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB执行UPDATE后返回行报错,如何获取受影响行数据?

在MariaDB中执行UPDATE/INSERT后获取受影响行数据的方法

你遇到的#1064语法错误,是因为RETURNING子句在MariaDB 10.5.0及以后版本才被支持,低于这个版本的MariaDB不识别该语法。下面分情况说明可行的解决方法:

一、MariaDB 10.5及以上版本:直接用RETURNING子句

这个版本开始原生支持RETURNING,可以在UPDATE/INSERT语句末尾直接指定要返回的列:

  • UPDATE后返回数据
    返回整行:
UPDATE news SET title = 'changed' WHERE ID = 8 RETURNING *;

返回特定列(比如ID和修改后的title):

UPDATE news SET title = 'changed' WHERE ID = 8 RETURNING ID, title;
  • INSERT后返回数据
    比如插入新数据后返回自增ID和标题:
INSERT INTO news(title, content) VALUES('新标题', '新内容') RETURNING ID, title;

二、MariaDB 10.5以下版本:替代方案

如果你的版本不支持RETURNING,可以用以下两种方式实现需求:

1. 分两次执行SQL(适合单行操作)

先执行更新/插入,再通过主键查询目标行:

  • UPDATE场景:
UPDATE news SET title = 'changed' WHERE ID = 8;
SELECT * FROM news WHERE ID = 8;
  • INSERT场景(带自增ID):
    用1541530获取刚插入的主键,再查询:
INSERT INTO news(title, content) VALUES('新标题', '新内容');
SELECT * FROM news WHERE ID = 1541530;

2. 用存储过程封装原子操作

如果需要保证更新和查询的原子性(避免中间被其他操作修改),可以写个存储过程:

DELIMITER //
CREATE PROCEDURE update_news_get_result(IN target_id INT, IN new_title VARCHAR(255))
BEGIN
    UPDATE news SET title = new_title WHERE ID = target_id;
    SELECT * FROM news WHERE ID = target_id;
END //
DELIMITER ;

调用存储过程即可:

CALL update_news_get_result(8, 'changed');

三、获取受影响的行数

不管用哪种方法,都可以用ROW_COUNT()函数获取刚执行的UPDATE/INSERT语句影响的行数:

UPDATE news SET title = 'changed' WHERE ID = 8;
SELECT ROW_COUNT(); -- 返回受影响的行数,比如1表示成功修改1行

内容的提问来源于stack exchange,提问作者Avetik Nersisyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:01:40