InnoDB 對重複鍵的自增控制
MySQL 的InnoDB 引擎為表提供了自增主鍵功能,自動為表產生唯一標識符每行。但是,預設情況下,InnoDB 也會在重複鍵更新時遞增主鍵,導致值不連續。
避免重複時自動遞增
要防止此問題並保持連續的自動遞增
要防止此問題並保持連續的自動遞增值,可以修改 innodb_autoinc_lock_mode 設定選項。透過將其設為“0”,您可以切換到“傳統”自動增量鎖定模式,這可以確保即使對於重複的按鍵更新,也會將連續的值分配給 AUTO_INCREMENT 列。
設定 InnoDB Auto-增量模式
[mysqld] innodb_autoinc_lock_mode=0
在 MySQL 設定檔中設定 innodb_autoinc_lock_mode 值,通常位於/etc/my.cnf 或/my.ini.
表格結構和查詢範例
CREATE TABLE IF NOT EXISTS `table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `field1` varchar(200) NOT NULL, `field2` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `field1` (`field1`), KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; INSERT INTO table ( field1, field2 ) VALUES (:value1, :value2) ON DUPLICATE KEY UPDATE field1 = :value1, field2 = :value2
您在提供的上下文中的表格結構和查詢如下:
當innodb_autoinc_lock_mode 設定為「0」時,此查詢將更新重複記錄而不增加id列,確保新插入的連續值。
警告:
請注意,在應用程式中依賴連續的自動遞增 ID 並不是一個好的做法。自動遞增值旨在提供唯一標識符,不應用於排序或排序目的。以上是如何防止InnoDB在重複鍵更新時自動遞增?的詳細內容。更多資訊請關注PHP中文網其他相關文章!