MySQL 8.0支持原子数据定义语言(DDL)语句。此功能称为原子DDL。原子DDL语句将数据字典更新,存储引擎操作和与DDL操作相关联的二进制日志写入操作组合到单个原子操作中。即使服务器在操作过程中暂停,该操作也可以提交,并在数据字典,存储引擎和二进制日志中保留适用的更改,或者回滚。
注意
原子DDL不是事务性DDL。DDL语句(原子的或其他方式)隐式结束当前会话中处于活动状态的任何事务,就好像您COMMIT在执行该语句之前已执行了。这意味着DDL语句不能在另一个事务内,在诸如的事务控制语句内执行,也不能 START TRANSACTION ... COMMIT与同一事务内的其他语句组合。
通过在MySQL 8.0中引入MySQL数据字典,可以实现原子DDL。在早期的MySQL版本中,元数据存储在元数据文件,非事务表和特定于存储引擎的词典中,这需要中间提交。MySQL数据字典提供的集中式事务性元数据存储消除了这一障碍,从而可以将DDL语句操作重组为原子性的。
支持的DDL语句
原子DDL功能支持表DDL语句和非表DDL语句。与表相关的DDL操作需要存储引擎支持,而非表DDL操作则不需要。当前,仅InnoDB存储引擎支持原子DDL。
支持的表DDL语句包括 CREATE,ALTER和 DROP数据库,表空间,表和索引的TRUNCATE TABLE语句以及该 语句。
受支持的非表DDL语句包括:
CREATE和DROP 语句,以及(如果适用)ALTER 存储程序,触发器,视图和用户定义函数(UDF)的语句。
账户管理语句: CREATE,ALTER, DROP,,如果