ホームページ  >  記事  >  データベース  >  重複キーの更新時に InnoDB が自動インクリメントされるのを防ぐ方法は?

重複キーの更新時に InnoDB が自動インクリメントされるのを防ぐ方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 06:20:03205ブラウズ

How to Prevent InnoDB Auto Incrementing on Duplicate Key Updates?

重複キーの InnoDB 自動インクリメント制御

MySQL の InnoDB エンジンは、テーブルの主キーの自動インクリメント機能を提供し、テーブルに対して一意の識別子を自動的に生成します。各行。ただし、デフォルトでは、InnoDB は重複キーの更新時に主キーもインクリメントするため、値が不連続になります。

重複時の自動インクリメントを回避する

この問題を回避するには連続した自動インクリメント値を維持するには、innodb_autoinc_lock_mode 構成オプションを変更できます。これを「0」に設定すると、「従来の」自動インクリメント ロック モードに切り替わり、重複キーの更新でも連続した値が AUTO_INCREMENT カラムに割り当てられます。

InnoDB Auto-インクリメント モード

MySQL 構成ファイルの innodb_autoinc_lock_mode 値を設定します。通常は /etc/my.cnf または /my.ini にあります。

[mysqld]
innodb_autoinc_lock_mode=0

テーブル構造およびクエリの例

指定されたコンテキストでのテーブル構造とクエリは次のとおりです。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。