Maison > base de données > tutoriel mysql > Comment empêcher l'incrémentation automatique d'InnoDB lors des mises à jour de clés en double ?

Comment empêcher l'incrémentation automatique d'InnoDB lors des mises à jour de clés en double ?

Mary-Kate Olsen
Libérer: 2024-11-15 06:20:03
original
259 Les gens l'ont consulté

How to Prevent InnoDB Auto Incrementing on Duplicate Key Updates?

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
Copier après la connexion

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 
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal