【TiDB 4.0 PCTA 学习笔记】- 2.4 Behavior Differences Between MySQL and TiDB(TiDB 与 MySQL 的差异)@2班+董沛霖

课程名称:201 + 2.4 Behavior Differences Between MySQL and TiDB(TiDB 与 MySQL 的差异)

学习时长:15min

课程收获:了解 TiDB 和 MySQL 在语法、功能和行为上的主要差异。

课程内容:

TiDB与MySQL的兼容性:

  1. 协议100%兼容。客户端,迁移工具,连接器等都可以共用。
  2. 语法高度兼容。
  3. 语义略有区别。部分不支持,部分有行为上的区别

相对于MySQL,TiDB不支持的特性:

  1. 存储过程
  2. 触发器
  3. 调度事件
  4. 自定义函数
  5. 外键与约束

相对于MySQL,TiDB有差异的特性:参见与 MySQL 兼容性对比

  1. 自增主键:

不支持将此属性添加到已存在的列上。
单个TiDB实例可以保证唯一性、递增性、连续性。
多个TiDB实例可以保证唯一性,但不能保证严格的递增与连续性。

  1. 索引:

不支持全文索引。
不支持空间索引。
不支持部分索引选项,如:可见性、key_block_size、with parser等(4.0已支持)。
不支持部分索引类型,如:Btree,Rtree。

  1. 主键:

仅有单列的整型做主键时可以作为聚簇存储。
其他类型的主键,其实都是唯一键。

  1. 不支持multi-schema change,如:alter table … modify column … , modify column …;
  2. 不支持有损的列变更:如:char(10) → char(5)
  3. 隔离级别:参见: TiDB 事务隔离级别

默认RR,用快照实现,与MySQL的RR略有区别。
RC 隔离级别仅在悲观事务中支持。

  1. analyze table:在MySQL中比较轻,但在TiDB中非常重。
  2. 视图:不支持UPDATE、INSERT、DELETE等写入操作。
  3. 存储引擎:仅在语法上兼容创建表时指定存储引擎,实际上 TiDB 会将元信息统一描述为 InnoDB 存储引擎。TiDB 支持类似 MySQL 的存储引擎抽象,但需要在系统启动时通过–store 配置项来指定存储引擎。
  4. 不支持除 ascii、latin1、binary、utf8、utf8mb4 以外的字符集。
  5. 查询计划 EXPLAIN、EXPLAIN FOR:输出格式、内容、权限设置与 MySQL 有比较大的差别,参见理解 TiDB 执行计划

学习过程中参考的其他资料