执行基于语句的、 和 值 复制 AUTO_INCREMENT, 但有以下例外情况:LAST_INSERT_ID()TIMESTAMP
-
AUTO_INCREMENT使用基于语句的复制无法正确复制 调用导致更新列的触发器或函数的语句。这些语句被标记为不安全。(错误 #45677) -
INSERT进入具有复合主键的表中包含的 列AUTO_INCREMENT不是该复合键的第一列,对于基于语句的日志记录或复制来说是不安全的。这些语句被标记为不安全。(错误 #11754117、错误 #45670)此问题不会影响使用
InnoDB存储引擎的InnoDB表,因为具有 AUTO_INCREMENT 列的表需要至少一个键,其中自动增量列是唯一的或最左边的列。 -
将
AUTO_INCREMENT列添加到表中ALTER TABLE可能不会在副本和源上产生相同的行顺序。发生这种情况是因为行编号的顺序取决于用于表的特定存储引擎以及插入行的顺序。如果在源和副本上具有相同的顺序很重要,则必须在分配AUTO_INCREMENT编号之前对行进行排序。假设您要向具有 和AUTO_INCREMENT列的表添加一列,以下语句会生成一个 与 相同的新表t1``col1``col2``t2``t1但有一AUTO_INCREMENT列:CREATE TABLE t2 LIKE t1; ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY; INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;重要的
为了保证源和副本的顺序相同,子句
ORDER BY必须 命名.t1刚刚给出的说明受到以下限制
CREATE TABLE ... LIKE: 外键定义被忽略,DATA DIRECTORY和INDEX DIRECTORYtable 选项也是如此。如果表定义包含任何这些特征,请使用与用于创建t2的CREATE TABLE语句相同的语句进行创建t1,但添加了AUTO_INCREMENT列。不管用于创建和填充具有该
AUTO_INCREMENT列的副本的方法如何,最后一步是删除原始表,然后重命名该副本:DROP t1; ALTER TABLE t2 RENAME t1;




