RETURNING

RETURNING 附加在受支持的 INSERT、UPDATE 或 DELETE 语句之后,返回该语句影响行的最终行镜像。

描述

RETURNING 子句在一次往返中返回数据修改语句影响的行:

  • INSERT ... RETURNING 返回插入的行,包括生成列和默认值列。

  • UPDATE ... RETURNING 返回更新后的行。

  • DELETE ... RETURNING 返回被删除的行。

返回表达式列表可以包含目标表列名、目标表名或别名加 .*、别名以及受支持的标量表达式。表达式不能包含聚合函数、窗口函数、子查询、变量、外部 UDF 或易变函数。oldnew 伪命名空间不受支持。

语法

INSERT INTO table [(column, ...)] VALUES (...) RETURNING expression [, expression] ...
UPDATE table [AS alias] SET column = value, ... RETURNING expression [, expression] ...
DELETE FROM table WHERE ... RETURNING expression [, expression] ...

参数

参数

说明

expression

为每个受影响的行返回的目标表列、table.*、别名或受支持的标量表达式。

示例

DROP DATABASE IF EXISTS returning_demo;
CREATE DATABASE returning_demo;
USE returning_demo;

CREATE TABLE t (id BIGINT AUTO_INCREMENT PRIMARY KEY, v INT DEFAULT 7, note VARCHAR(30));
INSERT INTO t(note) VALUES ('values') RETURNING id, v, note;
INSERT INTO t(v, note) SELECT 11, 'select' RETURNING t.*, v * 2 AS twice;
UPDATE t AS x SET v = v + 10 WHERE note = 'values' RETURNING x.id, x.v, x.note;
UPDATE t SET v = 99 WHERE id = -1 RETURNING id, v;
DELETE FROM t WHERE note = 'select' RETURNING id, v, note;

DROP DATABASE returning_demo;

限制

RETURNING 仅支持普通持久表以及语法部分所示的单表 DML 形式。以下形式不受支持:

  • REPLACEMERGE INTOINSERT IGNOREINSERT OVERWRITEINSERT ... ON DUPLICATE KEY UPDATE

  • WITH 子句的 DML 语句或显式 PARTITION 选择。

  • 带优先级或 IGNORE 修饰符的语句、连接或多表 UPDATE 以及 UPDATE ... FROM

  • DELETE QUICKDELETE IGNOREDELETE USING 和多表 DELETE

  • 临时表、外部表、内部表、系统表以及非表目标。

  • 聚合或窗口表达式、子查询、变量、外部 UDF、易变函数,以及在 RETURNING 列表中引用非目标来源。