Contrôle d'incrémentation automatique InnoDB sur les clés en double
Le moteur InnoDB de MySQL fournit une fonctionnalité de clé primaire à incrémentation automatique pour les tables, générant automatiquement des identifiants uniques pour chaque rangée. Cependant, par défaut, InnoDB incrémente également la clé primaire lors des mises à jour de clés en double, ce qui conduit à des valeurs non consécutives.
Éviter l'incrémentation automatique sur les doublons
Pour éviter ce problème et conservez des valeurs d'incrémentation automatique consécutives, vous pouvez modifier l'option de configuration innodb_autoinc_lock_mode. En le définissant sur "0", vous passez au mode de verrouillage par incrémentation automatique "traditionnel", qui garantit que des valeurs consécutives sont attribuées aux colonnes AUTO_INCREMENT même pour les mises à jour de clés en double.
Configuration automatique d'InnoDB Mode incrémental
Définissez la valeur innodb_autoinc_lock_mode dans votre fichier de configuration MySQL, généralement situé dans /etc/my.cnf ou /my.ini.
[mysqld] innodb_autoinc_lock_mode=0
Structure de la table et exemple de requête
La structure de votre table et votre requête dans le contexte fourni sont les suivantes :
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
Avec innodb_autoinc_lock_mode défini sur "0", cette requête mettra à jour les enregistrements en double sans incrémenter la colonne id, garantissant des valeurs consécutives pour les nouvelles insertions.
Attention :
Notez que s'appuyer sur des ID d'auto-incrémentation consécutifs dans votre application n'est pas une bonne pratique. Les valeurs à incrémentation automatique sont destinées à fournir des identifiants uniques et ne doivent pas être utilisées à des fins de commande ou de tri.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!