MySQL 兼容性¶
本篇文章主要对比并介绍 MatrixOne 数据库的 MySQL 模式以及原生 MySQL 数据库的兼容性信息。
MatrixOne 与 MySQL 8.0 的协议,以及 MySQL 8.0 常用的功能和语法都具有高度的兼容性。此外,MatrixOne 也对常见的 MySQL 周边工具提供了支持,如 Navicat,MySQL Workbench,JDBC 等。然而,由于 MatrixOne 的技术架构不同,且仍处于发展和完善阶段,因此有一些功能尚未得到支持。本节将主要从以下几个方面详述 MatrixOne 数据库的 MySQL 模式与原生 MySQL 数据库的区别:
DDL 语句
DCL 语句
DML 语句
高级 SQL 功能
数据类型
索引和约束
分区支持
函数与操作符
存储引擎
事务
安全与权限
备份恢复
系统变量
编程语言
周边工具
DDL 语句¶
DATABASE 相关¶
不支持中文命名的表名。
ENCRYPTION目前语法支持但不生效。不支持
ALTER DATABASE。仅默认支持
utf8mb4字符集和utf8mb4_bin排序规则,无法更改。
TABLE 相关¶
不支持表定义中的
ENGINE=,但 MatrixOne 会直接忽略ENGINE=。ALTER TABLE 中的这些子句:
CHANGE [COLUMN],MODIFY [COLUMN],RENAME COLUMN,ADD [CONSTRAINT [symbol]] PRIMARY KEY,DROP PRIMARY KEY和ALTER COLUMN ORDER BY可以在 ALTER TABLE 语句中自由组合使用,但不支持与其他子句一起使用。临时表暂不支持使用
ALTER TABLE修改表结构。使用
CREATE TABLE ... CLUSTER BY...所建的表,不支持使用ALTER TABLE修改表结构。ALTER TABLE 不支持
PARTITION相关的操作。支持定义
Cluster by column字句,对某列进行预排序加速查询。
VIEW 相关¶
不支持
with check option子句。不支持
DEFINER与SQL SECURITY子句。
SEQUENCE 相关¶
MySQL 不支持 SEQUENCE 对象,而 MatrixOne 可以通过 CREATE SEQUENCE 创建一个序列,MatrixOne 的语法与 PostgreSQL 相同。
在表中使用 SEQUENCE 时,需要注意
auto_increment与sequence不能一起用,否则会报错。
DCL 语句¶
ACCOUNT 相关¶
多租户 Account 是 MatrixOne 独有功能,包括 CREATE/ALTER/DROP ACCOUNT 等相关语句。
权限相关¶
GRANT,授权逻辑与 MySQL 有差异。
REVOKE,回收权限逻辑与 MySQL 有差异。
SHOW 相关¶
MatrixOne 不支持对某些对象进行 SHOW 操作,包括
TRIGGER,FUNCTION,EVENT,PROCEDURE,ENGINE等。由于架构上的不同,MatrixOne 实现了部分 SHOW 命令仅出于语法的兼容性,这些命令不会产生任何输出,如
SHOW STATUS/PRIVILEGES等。有些命令虽然在语法上与 MySQL 相同,但由于实现方式的不同,其结果与 MySQL 会有较大差异,如:
SHOW GRANTS,SHOW ERRORS,SHOW VARIABLES,SHOW PROCESSLIST。MatrixOne 提供了一些特有的 SHOW 命令以方便其自身的管理,包括
SHOW BACKEND SERVERS,SHOW ACCOUNTS,SHOW ROLES,SHOW NODE LIST等。
关于 SET¶
MatrixOne 的系统变量与 MySQL 存在较大差异,大部分只是为了实现语法的兼容性,目前实际可设置的参数包括:
ROLE,SQL_MODE,TIME_ZONE。
DML 语句¶
SELECT 相关¶
SELECT...FOR UPDATE 当前仅支持单表查询。
INSERT 相关¶
MatrixOne 不支持
LOW_PRIORITY,DELAYED,HIGH_PRIORITY等修饰符。
UPDATE 相关¶
MatrixOne 不支持使用
LOW_PRIORITY和IGNORE修饰符。
DELETE 相关¶
MatrixOne 不支持
LOW_PRIORITY,QUICK,IGNORE等修饰符。
子查询相关¶
MatrixOne 不支持
IN的多层关联子查询。
LOAD 相关¶
MatrixOne 支持
SET,但只支持SET columns_name=nullif(expr1,expr2)的形式。MatrixOne 支持客户端执行
LOAD DATA LOCAL,但在连接时必须加入--local-infile参数。MatrixOne 支持导入
JSONlines文件,但需要使用一些特殊的语法。MatrixOne 支持从对象存储导入文件,但需要使用一些特殊的语法。
EXPLAIN 相关¶
MatrixOne 的
Explain和Explain Analyze打印格式均参照 PostgreSQL,与 MySQL 有较大不同。不支持 JSON 类型的输出。
其他¶
REPLACE语句不支持使用VALUES row_constructor_list参数插入的一组值构成的行。
高级 SQL 功能¶
不支持触发器。
不支持存储过程。
不支持事件调度器。
不支持物化视图。
支持自定义函数,仅支持 Python, 与 MySQL 使用差异较大。
流计算¶
流计算属于 MatrixOne 独有功能,目前 v24.2.0.1 版本仅支持 Kafka 连接器。
Kafka 连接器需要通过特殊语法创建及使用。
数据类型¶
BOOL: 与 MySQL 的布尔值类型实际上是 int 不同,MatrixOne 的布尔值是一个新的类型,它的值只能是 true 或 false。
DECIMAL:DECIMAL(P,D),MatrixOne 的有效数字 P 和小数点后的位数 D 最大精度均为 38 位,MySQL 则分别为 65 和 30。
浮点数:MySQL8.0.17 后废弃 Float(M,D) 及 Double(M,D) 用法,但 MatrixOne 仍保留该用法。
DATETIME: MySQL 的最大取值范围为
'1000-01-01 00:00:00'到'9999-12-31 23:59:59',MatrixOne 的最大范围为'0001-01-01 00:00:00'到'9999-12-31 23:59:59'。TIMESTAMP: MySQL 的最大取值范围是
'1970-01-01 00:00:01.000000'UTC 到'2038-01-19 03:14:07.999999'UTC,MatrixOne 的最大范围'0001-01-01 00:00:00'UTC 到'9999-12-31 23:59:59'UTC。MatrixOne 支持 UUID 类型。
MatrixOne 支持向量类型。
MatrixOne 支持 DATALINK 类型。
支持空间 Spatial 类型(
GEOMETRY,GEOMETRY32)。不支持 SET 类型。
不支持 MEDIUMINT 类型。
索引和约束¶
MatrixOne 支持向量索引。
次级索引在
IN,Between and及Like语句中暂时不生效。外键不支持
ON CASCADE DELETE级联删除。
分区支持¶
支持
KEY,HASH,RANGE,RANGE COLUMNS,LIST,LIST COLUMNS六种分区类型。支持
KEY,HASH两种分区裁剪,其他四种暂未实现。子分区仅实现语法,未实现功能。
ADD/DROP/TRUNCATE PARTITION暂未支持。
关键字¶
MatrixOne 与 MySQL 关键字差异较多,请参考 MatrixOne 关键字。
函数与操作符¶
聚合函数¶
支持 MatrixOne 特有的 Median 中位数函数。
CAST 函数¶
类型转换规则与 MySQL 差异较大,请参考 CAST。
窗口函数¶
支持包括
RANK、DENSE_RANK、ROW_NUMBER、NTILE、CUME_DIST、PERCENT_RANK、LAG、LEAD、FIRST_VALUE、LAST_VALUE和NTH_VALUE在内的窗口函数。
JSON 函数¶
支持
JSON_EXTRACT、JSON_UNQUOTE、JSON_QUOTE、JSON_KEYS、JSON_LENGTH、JSON_ARRAY、JSON_OBJECT、JSON_PRETTY、JSON_TYPE、JSON_VALID、JSON_VALUE、JSON_SCHEMA_VALID等 JSON 函数。
系统管理函数¶
支持
CURRENT_ROLE_NAME(),CURRENT_ROLE(),CURRENT_USER_NAME(),CURRENT_USER,PURGE_LOG()。
存储引擎¶
MatrixOne 的 TAE 存储引擎是完全独立研发的,不支持 MySQL 的 InnoDB,MyISAM 等引擎。
MatrixOne 中仅有 TAE 一种存储引擎,无需使用
ENGINE=XXX来更换引擎。
安全与权限¶
仅支持使用
ALTER USER方法修改密码。不支持修改用户连接个数上限。
不支持连接 IP 白名单。
不支持
LOAD文件授权管理。可以通过
CREATE STAGE部分支持SELECT INTO文件授权管理。
事务¶
MatrixOne 默认为悲观事务。
与 MySQL 不同,MatrixOne 中的 DDL 语句是事务性的,可以在一个事务中回滚 DDL 操作。
MatrixOne 中不允许在一个事务中进行 SET 操作。
支持通过
LOCK TABLES和UNLOCK TABLES执行表级锁操作。
备份恢复¶
支持基于 mobackup 工具的物理备份。
支持快照备份
不支持 mysqldump 备份工具,仅支持 mo-dump 工具。
不支持 binlog 日志备份。
系统变量¶
MatrixOne 的
lower_case_table_names有 2 种模式,默认为 1。MatrixOne 的
sql_mode只支持ONLY_FULL_GROUP_BY一种模式
系统表¶
MatrixOne 的系统表既有自己的独特系统表,也整体兼顾了 MySQL 的系统表。
MatrixOne 中默认的
mysql和information_schema这两个系统库整体兼容了 MySQL 的使用模式。MatrixOne 中的
system_metrics系统库收集和存储了一系列 MatrixOne 服务的运行时状态监控数据。MatrixOne 中的
system系统库收集了 MatrixOne 中用户和系统执行的各类语句和系统运行日志。MatrixOne 中的
mo_catalog系统库存储了 MatrixOne 中的各种数据库对象和元数据。
编程语言¶
Java,Python,C#,Golang 连接器和 ORM 基本支持,其他语言的连接器及 ORM 可能会碰到兼容性问题。
其他支持工具¶
Navicat,DBeaver,MySQL Workbench,HeidiSQL 基本支持,但是由于 ALTER TABLE 能力不完善,表设计功能支持不完善。
不支持 xtrabackup 备份工具。