课程名称:课程版本(101/201/301)+2.4 Behavior Differences Between MySQL and TiDB(TiDB 与 MySQL 的差异)
学习时长:15分钟
课程收获:了解 MySQL 与 TiDB 的语法&语义 差异
课程内容:
语法兼容
支持绝大多数mysql5.7/mysql8.0 的
DDL、DML、Basic Transaction/Locking Statements
Prepared Statements
Administration Statements
语义兼容
部分不支持,因为:
分布式环境难以实现
已有设计但还未完全实现
部分与MySQL有区别:
1、auto_increment
不支持对一个已经存在的列添加auto_increment属性
单个TiDB实例不离线的情况下,保证auto_increment唯一,连续,递增
多个TiDB实例保证auto_increment唯一,但不保证连续,也不保证递增
2、存储引擎
只在语法上支持mysql innodb,建表时指定STORAGE=XXX 也会忽略,不起作用
TiDB里,启动时用 --store 指定存储引擎,如–store=tikv
3、不支持的索引
不支持的全文索引Fulltext index、空间索引 Spatial index、B+tree、Hash tree、Some index option(except VISIBLE/INVISIBLE)
4、主键
数值类型主键,存储与mysql的聚集索引类似
非数值类型主键,模拟唯一索引存储
5、一个DDL Statement里,不支持对Multi-schema 多个列 同时DDL
如 alter table t modify column a int,modify column b int;
alter table t add column a int,drop cloumn b;
6、不支持有长度或精度有缺失的变更,即同种数据类型只能改大长度,不能改小
比如,char(10)—>char(5)、varchar(100)—>char(10)、decimal(5)—>decimal(3)
7、隔离级别 Isolation Level
RR(mysql的默认隔离级别),在TiDB里,用Snapshot Isolation 快照隔离实现,与 Repeatable Read 有些许差别,Snapshot Isolation更严格
READ COMMITTED 在TiDB里,只在悲观事务实现
8、Analyze Table
在mysql innodb是轻量的,但在TiDB是重量级的,因为要重构统计信息
9、视图View
不支持对视图的insert/update/delete
10、Charsets 字符集
只支持 utf8、utf8mb4、ascii、latin1 与 binary
11、explain 语句 执行计划的展示结果与mysql 不一样
12、其他不支持的特性
存储过程&函数 Stored procedures and functions
触发器 Triggegrs
事件 Events
用户自定义函数 User-definded functions
外键约束与check 约束 Foreign key constraints/Check constraints