文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  複製與 AUTO_INCREMENT

19.5.1.1 複製與 AUTO_INCREMENT

AUTO_INCREMENTLAST_INSERT_ID()TIMESTAMP 值的基於陳述式的複製會受到下列例外情況的約束

  • 呼叫觸發程序或函數導致更新 AUTO_INCREMENT 資料行的陳述式,無法使用基於陳述式的複製正確複製。這些陳述式會標記為不安全。(錯誤 #45677)

  • INSERT 插入具有複合主鍵(包含 AUTO_INCREMENT 資料行,但該資料行不是此複合鍵的第一個資料行)的資料表時,對於基於陳述式的記錄或複製而言是不安全的。這些陳述式會標記為不安全。(錯誤 #11754117,錯誤 #45670)

    這個問題不會影響使用 InnoDB 儲存引擎的表格,因為具有 AUTO_INCREMENT 資料行的 InnoDB 表格,至少需要一個鍵,其中自動遞增資料行是唯一的或最左邊的資料行。

  • 使用 ALTER TABLE 在表格中新增 AUTO_INCREMENT 資料行,可能會導致複本和來源上的列順序不同。這是因為列的編號順序取決於表格使用的特定儲存引擎以及列的插入順序。如果來源和複本上的順序相同非常重要,則必須在指定 AUTO_INCREMENT 數字之前對列進行排序。假設您想要在具有 col1col2 資料行的表格 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 DIRECTORYINDEX DIRECTORY 表格選項也會被忽略。如果表格定義包含任何這些特性,請使用與建立 t1 的陳述式相同的 CREATE TABLE 陳述式建立 t2,但要加入 AUTO_INCREMENT 資料行。

    無論使用何種方法建立和填入具有 AUTO_INCREMENT 資料行的副本,最後一步都是刪除原始表格,然後重新命名副本。

    DROP t1;
    ALTER TABLE t2 RENAME t1;

    另請參閱第 B.3.6.1 節:「ALTER TABLE 的問題」