详情页标题前

腾讯云TDSQL-C MySQL版支持 returning

详情页1

功能介绍

在某些使用场景下,需要在 DML 操作后返回刚操作的数据行。实现这个需求一般有两种办法:一是在开启事务之后,在 DML 语句后面紧跟一条 SELECT 语句。二是使用触发器等较为复杂的操作实现。前者主要会增加一条 SELECT 语句的开销,后者则会令 SQL 的实现变得更加复杂并且不够灵活(需要创建触发器)。
因此,RETURNING 语法的设计主要针对该场景的优化,通过在 DML 语句后增加 RETURNING 关键字可以灵活高效地实现上述的需求。

支持版本

内核版本 TDSQL-C MySQL 版 5.7 2.0.23/2.1.9 及以上。内核版本 TDSQL-C MySQL 版 8.0 3.1.10 及以上。

适用场景

在目前 TDSQL-C MySQL 版 5.7 2.0.23/2.1.9 及以上的内核版本中,分别支持:INSERT … RETURNING、REPLACE … RETURNING、DELETE … RETURNING。该语法允许返回所有被 INSERT/REPLACE/DELETE 语句操作过的行(statement 为单位)。同时,RETURNING 也支持在 prepared statements,存储过程中使用。在目前 TDSQL-C MySQL 版 3.1.10 及以上的内核版本中,分别支持:DELETE … RETURNING、INSERT … RETURNING、REPLACE … RETURNING、UPDATE … RETURNING 语法,可以返回该 statement 所操作的数据行。在使用该功能时,需要注意以下几点:1. 在使用 RETURNING 时,DELETE…RETURNING 语句返回前镜像数据,INSERT/REPLACE…RETURNING 返回后镜像数据。2. INSERT/REPLACE 场景下,外层表的列对 returning 中的子查询语句,暂不具有可见性。3. INSERT/REPLACE 的 RETURNING 语句若需要返回 last_insert_id(),则该 last_insert_id() 的值为该语句执行成功之前的值。若需要获得精确的 last_insert_id() 值,建议使用 RETURNING 直接返回该表的自增列 ID。

使用说明

INSERT… RETURNING

MySQL [test]> CREATE TABLE `t1` (id1 INT);Query OK, 0 rows affected (0.04 sec)
MySQL [test]> CREATE TABLE `t2` (id2 INT);Query OK, 0 rows affected (0.03 sec)
MySQL [test]> INSERT INTO t2 (id2) values (1);Query OK, 1 row affected (0.00 sec)
MySQL [test]> INSERT INTO t1 (id1) values (1) returning *, id1 * 2, id1 + 1, id1 * id1 as alias, (select * from t2); +------+---------+---------+-------+--------------------+| id1 | id1 * 2 | id1 + 1 | alias | (select * from t2) |+------+---------+---------+-------+--------------------+| 1 | 2 | 2 | 1 | 1 |+------+---------+---------+-------+--------------------+1 row in set (0.01 sec)
MySQL [test]> INSERT INTO t1 (id1) SELECT id2 from t2 returning id1;+------+| id1 |+------+| 1 |+------+1 row in set (0.01 sec)

REPLACE … RETURNING

MySQL [test]> CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(1));Query OK, 0 rows affected (0.04 sec)
MySQL [test]> CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(1));Query OK, 0 rows affected (0.03 sec)
MySQL [test]> INSERT INTO t2 VALUES (1,'a'),(2,'b'),(3,'c');Query OK, 3 rows affected (0.00 sec)Records: 3 Duplicates: 0 Warnings: 0
MySQL [test]> REPLACE INTO t1 (id1, val1) VALUES (1, 'a');Query OK, 1 row affected (0.00 sec)
MySQL [test]> REPLACE INTO t1 (id1, val1) VALUES (1, 'b') RETURNING *;+-----+------+| id1 | val1 |+-----+------+| 1 | b |+-----+------+1 row in set (0.01 sec)

DELETE … RETURNING

MySQL [test]> CREATE TABLE t1 (a int, b varchar(32));Query OK, 0 rows affected (0.04 sec)
MySQL [test]> INSERT INTO t1 VALUES(7,'ggggggg'), (1,'a'), (3,'ccc'),(4,'dddd'), (1,'A'), (2,'BB'), (4,'DDDD'),(5,'EEEEE'), (7,'GGGGGGG'), (2,'bb');Query OK, 10 rows affected (0.03 sec)Records: 10 Duplicates: 0 Warnings: 0
MySQL [test]> DELETE FROM t1 WHERE a=2 RETURNING *;+------+------+| a | b |+------+------+| 2 | BB || 2 | bb |+------+------+2 rows in set (0.01 sec)
MySQL [test]> DELETE FROM t1 RETURNING *;+------+---------+| a | b |+------+---------+| 7 | ggggggg || 1 | a || 3 | ccc || 4 | dddd || 1 | A || 4 | DDDD || 5 | EEEEE || 7 | GGGGGGG |+------+---------+8 rows in set (0.01 sec)



官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/139677.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 阿里云对象存储OSS降低因账号密码泄露带来的未授权访问风险-云淘科技

    如果因个人或者企业账号密码泄露引发了未经授权的访问,可能会出现非法用户对OSS资源进行违法操作,或者合法用户以未授权的方式对OSS资源进行各类操作,这将给数据安全带来极大的威胁。为此,OSS提供了在实施数据安全保护时需要考虑的多种安全最佳实践。 重要 以下最佳实践遵循一般准则,并不等同完整的安全解决方案。这些最佳实践可能不适合您的环境或不满足您的环境要求,仅…

    阿里云对象存储 2023年12月10日
  • 腾讯云Serverless应用中心API 网关组件-同尘科技

    操作场景 API 网关组件是 serverless-tencent 组件库中的基础组件之一,您可以通过该组件快速且方便地创建、配置和管理腾讯云的 API 网关产品。 操作步骤 通过 API 网关组件,您可以对一个 API 服务/接口进行完整的创建、配置、部署和删除等操作。 安装 已经安装 Serverless Cloud Framework 。详情请参见 安…

    腾讯云 2023年12月9日
  • 云数据仓库ADB上AnalyticDBMySQL版与MySQL的DML差异怎么办?-云小二-阿里云

    云数据仓库ADB上AnalyticDBMySQL版与MySQL的DML差异怎么办? 以下为热心网友提供的参考意见 AnalyticDB for MySQL(简称ADB)版与MySQL在数据操作语言(DML)上确实存在一些差异。例如,AnalyticDB MySQL支持存储过程调用,详情请参见DELETE和INSERT INTO等操作。然而,AnalyticD…

    阿里云 2024年1月10日
  • 腾讯云TDSQL-C MySQL版新版本控制台

    TDSQL-C MySQL 版发布了新版本控制台,支持页签视图,相比旧版本的列表视图,易用性、美观性和高效性有效提升。腾讯云推荐您使用新版本控制台,它对查看集群有更清晰的视图信息,能够更加便捷高效地管理集群。本文介绍新版本控制台,包括新老版本控制台对比和新版本控制台功能管理等。 新老版本控制台对比 界面对比 新版本控制台界面旧版本控制台界面新版本控制台界面为…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云云原生大数据计算服务 MaxComputeMaxCompute项目设置RAM子账号为超级管理员-云淘科技

    本文为您介绍在MaxCompute项目中如何将RAM子账号设置为超级管理员,并提供了超级管理员在成员管理、权限管理等方面的使用建议。 背景信息 日常工作中,为了保障数据安全,通常主账号为特定人员管理,使用MaxCompute的大部分用户都只持有RAM子账号。但是项目的所有者(Owner)只能为主账号,且MaxCompute的很多权限管理需要项目所有者才可以操…

    2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。