KunlunBase功能之insert/update/delete...returning语句

在一些业务场景中,用户需要插入、更新、删除一行或者多行目标数据行,然后获得自己刚刚插入、更新、删除之后的行或者其部分字段的值,包括部分字段构成的任意合法的表达式的值。

对于MySQL用户来说,要做到这一点,用户通常需要在一个显式的事务中执行update语句,然后使用相同的查询条件把update的语句取出来。

之所以要在显式事务中做,是为了防止其他并发的事务update了本连接刚刚update的行,那样的话,随后的select语句得到行就不是本连接刚刚update之后的行了,因为这些行又被其他事务更新过了。

而在Oracle和PostgreSQL数据库中,用户可以使用update/delete语句的returning子句,用一条语句完成上述工作。

这样的好处是可以提升效率,省去的开销包括发送一条select语句以及做目标行的查找等工作;省去的开销还包括操作显式事务的开销,也就是发送begin和commit语句的开销。

因此,使用update…returning语句预期可以比在显式事务中update行,然后select出来,能够提升性能10%以上。

所以这是一个很好的功能。事实上如果你搜索 “mysql update returning”,你还能搜到不少在MySQL中实现类似oracle/postgresql的单条update/delete语句的returning子句的文章,通过借助触发器和临时表等技巧和复杂的操作。

但是这些复杂的步骤导致语句执行效率也显著降低了,并且使用也不方便(需要对每个数据表创建触发器)。

为了提升用户的程序效率,降低用户的开发难度,提升用户使用KunlunBase的体验,我们在KunlunBase中也实现insert/update/delete语句的returning子句。

为此,我们在kunlun-storage中实现了insert/update/delete… returning语句供计算节点使用,并且在计算节点中基于PostgreSQL原有的insert/update/delete…returning 语句的实现,加入了对远程数据读写的支持。

这样,KunlunBase就具备了insert…returning、update…returning和delete…returning语句功能,分别返回insert语句插入的行,update语句更新后的行,以及返回delete语句删除的行,包括这些行的字段组成的任意合法的表达式的值。用户已经可以在KunlunDB上使用这些功能。

下图展示了这个很cool的功能。

首先,建表并填充数据:

现在我们执行update… returning语句:

然后执行delete… returning子句:

最后,explain一下update/delete… returning子句:

原文链接:

KunlunBase功能之insert/update/delete...returning语句 - Powered by MinDochttp://www.kunlunbase.com:8181/docs/b/b-1dqidsef8jt2p

推荐阅读:

KunlunBase架构介绍 - Powered by MinDoc (kunlunbase.com)http://www.kunlunbase.com:8181/docs/b/b-1dnl0ff08vm42KunlunBase技术优势介绍 - Powered by MinDoc (kunlunbase.com)http://www.kunlunbase.com:8181/docs/b/b-1dnl0hidnehicKunlunBase技术特点介绍 - Powered by MinDoc (kunlunbase.com)http://www.kunlunbase.com:8181/docs/b/b-1dnl0gmd9l44gKunlun-Storage vs PostgreSQL OLTP 测试 - Powered by MinDoc (kunlunbase.com)http://www.kunlunbase.com:8181/docs/b/b-1dq86ad4auj8ePostgreSQL vs MySQL TPC-H 测试 - Powered by MinDoc (kunlunbase.com)http://www.kunlunbase.com:8181/docs/b/b-1dp6drao3djef

-END-

昆仑数据库是一个HTAP NewSQL分布式数据库管理系统,可以满足用户对海量关系数据的存储管理和利用的全方位需求。
应用开发者和DBA的使用昆仑数据库的体验与单机MySQL和单机PostgreSQL几乎完全相同,因为首先昆仑数据库支持PostgreSQL和MySQL双协议,支持标准SQL:2011的 DML 语法和功能以及PostgreSQL和MySQL对标准 SQL的扩展。同时,昆仑数据库集群支持水平弹性扩容,数据自动拆分,分布式事务处理和分布式查询处理,健壮的容错容灾能力,完善直观的监测分析告警能力,集群数据备份和恢复等 常用的DBA 数据管理和操作。所有这些功能无需任何应用系统侧的编码工作,也无需DBA人工介入,不停服不影响业务正常运行。
昆仑数据库具备全面的OLAP 数据分析能力,通过了TPC-H和TPC-DS标准测试集,可以实时分析最新的业务数据,帮助用户发掘出数据的价值。昆仑数据库支持公有云和私有云环境的部署,可以与docker,k8s等云基础设施无缝协作,可以轻松搭建云数据库服务。
请访问  http://www.kunlunbase.com  获取更多信息并且下载昆仑数据库软件、文档和资料。
KunlunBase项目已开源
【GitHub:】
https://github.com/zettadb
【Gitee:】
https://gitee.com/zettadb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值