课程名称:201 + 2.4 Behavior Differences Between MySQL and TiDB(TiDB 与 MySQL 的差异)
学习时长:15min
课程收获:了解 TiDB 和 MySQL 在语法、功能和行为上的主要差异。
课程内容:
TiDB与MySQL的兼容性:
- 协议100%兼容。客户端,迁移工具,连接器等都可以共用。
- 语法高度兼容。
- 语义略有区别。部分不支持,部分有行为上的区别
相对于MySQL,TiDB不支持的特性:
- 存储过程
- 触发器
- 调度事件
- 自定义函数
- 外键与约束
相对于MySQL,TiDB有差异的特性:参见与 MySQL 兼容性对比
- 自增主键:
不支持将此属性添加到已存在的列上。
单个TiDB实例可以保证唯一性、递增性、连续性。
多个TiDB实例可以保证唯一性,但不能保证严格的递增与连续性。
- 索引:
不支持全文索引。
不支持空间索引。
不支持部分索引选项,如:可见性、key_block_size、with parser等(4.0已支持)。
不支持部分索引类型,如:Btree,Rtree。
- 主键:
仅有单列的整型做主键时可以作为聚簇存储。
其他类型的主键,其实都是唯一键。
- 不支持multi-schema change,如:alter table … modify column … , modify column …;
- 不支持有损的列变更:如:char(10) → char(5)
- 隔离级别:参见: TiDB 事务隔离级别
默认RR,用快照实现,与MySQL的RR略有区别。
RC 隔离级别仅在悲观事务中支持。
- analyze table:在MySQL中比较轻,但在TiDB中非常重。
- 视图:不支持UPDATE、INSERT、DELETE等写入操作。
- 存储引擎:仅在语法上兼容创建表时指定存储引擎,实际上 TiDB 会将元信息统一描述为 InnoDB 存储引擎。TiDB 支持类似 MySQL 的存储引擎抽象,但需要在系统启动时通过–store 配置项来指定存储引擎。
- 不支持除 ascii、latin1、binary、utf8、utf8mb4 以外的字符集。
- 查询计划 EXPLAIN、EXPLAIN FOR:输出格式、内容、权限设置与 MySQL 有比较大的差别,参见理解 TiDB 执行计划。