16.4.1.1 复制和 AUTO_INCREMENT

AUTO_INCREMENTLAST_INSERT_ID()TIMESTAMP值的基于语句的复制正确完成,但以下情况除外:

此问题不会影响使用InnoDB存储引擎的 table,因为具有AUTO_INCREMENT列的InnoDBtable 需要至少一个键,其中自动增量列是唯一或最左列。

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;

Important

为了保证源和副本上的 Sequences 相同,ORDER BY子句必须命名t1的* all *列。

刚刚给出的说明受创建 table...喜欢的限制:外键定义将被忽略,DATA DIRECTORYINDEX DIRECTORYtable 选项也将被忽略。如果 table 定义包含任何这些 Feature,请使用CREATE TABLE语句创建t2,该语句与用于创建t1的语句相同,但增加AUTO_INCREMENT列。

无论使用哪种方法来创建和填充具有AUTO_INCREMENT列的副本,最后一步都是删除原始 table,然后重命名该副本:

DROP t1;
ALTER TABLE t2 RENAME t1;

另请参见第 B.4.6.1 节“ ALTER TABLE 的问题”

首页