阿里云分布式数据库目前还不支持触发器、存储过程、自定义函数、外键,除此之外,阿里云分布式数据库支持绝大部分MySQL5.7的语法。
不支持的特性
- 存储过程
- 视图
- 触发器
- 自定义函数
- 外键约束
- 全文索引
- 空间索引
- 非UTF8字符集
与MySQL有差异的特性
自增ID阿里云分布式数据库的自增ID(AutoIncrementID)只保证自增且唯一,并不保证连续分配。阿里云分布式数据库目前采用批量分配的方式,所以如果在多台阿里云分布式数据库上同时插入数据,分配的自增ID会不连续。
内建函数阿里云分布式数据库支持常用的MySQL内建函数,但是不是所有的函数都已经支持,具体请参考官方语法文档。
DDL阿里云分布式数据库实现了F1的异步Schema变更算法,DDL执行过程中不会阻塞线上的DML操作。目前已经支持的DDL包括:
- CreateDatabase
- DropDatabase
- CreateTable
- DropTable
- AddIndex
- DropIndex
- AddColumn
- DropColumn
- AlterColumn
- ChangeColumn
- ModifyColumn
- TruncateTable
- RenameTable
- CreateTableLike
事务
阿里云分布式数据库使用乐观事务模型,在执行Update、Insert、Delete等语句时,只有在提交过程中才会检查写写冲突,而不是像MySQL一样使用行锁来避免写写冲突。所以业务端在执行SQL语句后,需要注意检查commit的返回值,即使执行时没有出错,commit的时候也可能会出错。
Loaddata
阿里云分布式数据库在执行loaddata时,默认每2万行记录作为一个事务进行持久化存储。如果一次loaddata操作插入的数据超过2万行,那么会分为多个事务进行提交。如果某个事务出错,这个事务会提交失败,但它前面的事务仍然会提交成功,在这种情况下一次loaddata操作会有部分数据插入成功,部分数据插入失败。而MySQL中会将一次loaddata操作视为一个事务,如果其中发生失败情况,将会导致整个loaddata操作失败。