AUTO_INCREMENT
、LAST_INSERT_ID()
和 TIMESTAMP
值的基於陳述式的複製會受到下列例外情況的約束
呼叫觸發程序或函數導致更新
AUTO_INCREMENT
資料行的陳述式,無法使用基於陳述式的複製正確複製。這些陳述式會標記為不安全。(錯誤 #45677)將
INSERT
插入具有複合主鍵(包含AUTO_INCREMENT
資料行,但該資料行不是此複合鍵的第一個資料行)的資料表時,對於基於陳述式的記錄或複製而言是不安全的。這些陳述式會標記為不安全。(錯誤 #11754117,錯誤 #45670)這個問題不會影響使用
InnoDB
儲存引擎的表格,因為具有 AUTO_INCREMENT 資料行的InnoDB
表格,至少需要一個鍵,其中自動遞增資料行是唯一的或最左邊的資料行。使用
ALTER TABLE
在表格中新增AUTO_INCREMENT
資料行,可能會導致複本和來源上的列順序不同。這是因為列的編號順序取決於表格使用的特定儲存引擎以及列的插入順序。如果來源和複本上的順序相同非常重要,則必須在指定AUTO_INCREMENT
數字之前對列進行排序。假設您想要在具有col1
和col2
資料行的表格t1
中新增一個AUTO_INCREMENT
資料行,則以下陳述式會產生一個新的表格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 DIRECTORY
表格選項也會被忽略。如果表格定義包含任何這些特性,請使用與建立t1
的陳述式相同的CREATE TABLE
陳述式建立t2
,但要加入AUTO_INCREMENT
資料行。無論使用何種方法建立和填入具有
AUTO_INCREMENT
資料行的副本,最後一步都是刪除原始表格,然後重新命名副本。DROP t1; ALTER TABLE t2 RENAME t1;