KunlunBase 对 MySQL 私有 DML 语法的支持
前言
为了让 MySQL 的应用更为便捷地迁移到 KunlunBase,我们做了很多兼容 MySQL 的工作。
本篇章主要介绍 KunlunBase 现在已经支持的 MySQL 常用的私有 DML 语法,以及这些语法与原生 MySQL 的差异。
一、兼容 MySQL 的 insert ignore 语法
功能: 忽略违背唯一约束的新元组。
示例:
和原生 MySQL 的差异:
只忽略唯一性约束,如果违背其他约束(例如分区约束、非 null 约束),则报错。
例如:
二、兼容 MySQL 的 INSERT...ONDUPLICATE KEY UPDATE...语法
**功能:**插入数据;如果违背了某个唯一约束,则转变为更新操作,对其中一个冲突的元组进行更新。
示例:
和原生 MySQL 的差异:
暂不支持在 ON DUPLICATE KEY UPDATE 子句中使用 VALUES()函数来引用新值,可以使用 excluded 虚拟表来代替。
例如:
往临时表批量写入多个新元组时,如果新元组之间存在唯一性冲突,则会报错(根本原因是临时表存在于计算节点,使用的不是 innodb 引擎)。
例如:
临时表返回的影响行数的差异。即使更新前后的值相同,临时表返回的影响行数仍然大于 0。
例如:
三、兼容 mysql 的 replace into 语法
**功能:**插入元组;如果存在冲突的旧元组,则删除所有与之冲突的旧元组。
示例:
和原生 MySQL 的差异:
往临时表批量写入多个新元组时,如果新元组之间存在唯一性冲突,则会报错(根本原因是临时表存在于计算节点,使用的不是 innodb 引擎)。
例如:
四、兼容 MySQL 的 update/delete...order by...limit.. 语法
**功能:**指定更新/删除的元组的顺序和数量。
示例:
和原生 MySQL 的差异:
暂不支持指定分区表的更新/删除的顺序(注意:临时表的分区表已经支持)。 当然,实际使用中需要严格规定更新/删除顺序的场景是极少的,这一限制并不会对 KunlunBase 的用户造成困扰。
例如:
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.zettadb.com/ 获取更多信息并且下载昆仑数据库软件、文档和资料。KunlunBase 项目已开源
【GitHub:】https://github.com/zettadb
【Gitee:】https://gitee.com/zettadb
版权声明: 本文为 InfoQ 作者【KunlunBase】的原创文章。
原文链接:【http://xie.infoq.cn/article/a3516a4ce1b790dc0ce21975b】。文章转载请联系作者。
评论