Maison >base de données >tutoriel mysql >Comment récupérer efficacement les identifiants à incrémentation automatique après des insertions groupées dans MySQL ?

Comment récupérer efficacement les identifiants à incrémentation automatique après des insertions groupées dans MySQL ?

DDD
DDDoriginal
2024-12-01 19:22:10455parcourir

How to Efficiently Retrieve Auto-Increment IDs After Bulk Inserts in MySQL?

Obtention d'ID à incrémentation automatique à partir d'insertions groupées dans MySQL

L'une des tâches courantes dans la gestion de bases de données consiste à insérer plusieurs lignes dans une table et récupérer les ID d'auto-incrémentation générés pour chaque ligne. Bien que la récupération du dernier ID inséré soit simple à l'aide de la fonction LAST_INSERT_ID(), les insertions groupées posent un défi pour obtenir un tableau de tous les ID générés.

Méthode traditionnelle : insertion via une table temporaire

Auparavant, une technique courante consistait à insérer les nouveaux identifiants dans une table temporaire et à utiliser une sous-requête pour les récupérer. Cependant, cette approche nécessite des étapes supplémentaires et introduit une surcharge de performances.

Utilisation de LAST_INSERT_ID() et ROW_COUNT() avec InnoDB

Versions récentes de MySQL, en particulier celles utilisant InnoDB moteur de stockage, fournissent une méthode alternative pour récupérer les ID d’insertion en masse. Cette méthode exploite la fonction LAST_INSERT_ID() avec ROW_COUNT() pour extraire la plage de valeurs d'incrémentation automatique attribuées.

Procédure :

  1. Configurer le innodb_autoinc_lock_mode variable système à 0 (traditionnel) ou 1 (consécutif). Cela garantit que les valeurs d'incrémentation automatique sont attribuées de manière séquentielle pour les insertions groupées.
  2. Exécutez l'instruction d'insertion groupée.
  3. Récupérez le premier ID de LAST_INSERT_ID().
  4. Calculez le dernier ID en ajoutant ROW_COUNT() - 1 au premier ID.

Exemple :

INSERT INTO `my_table` (`name`, `email`) VALUES
('John Doe', 'john.doe@example.com'),
('Jane Doe', 'jane.doe@example.com'),
('Peter Jones', 'peter.jones@example.com');

SET @first_id = LAST_INSERT_ID();
SET @last_id = @first_id + ROW_COUNT() - 1;

SELECT * FROM `my_table` WHERE `id` BETWEEN @first_id AND @last_id;

Avantages :

  • Aucun temporaire tables : Élimine le besoin d'insertion et de sous-requête supplémentaires opérations.
  • Performances améliorées : Fournit un moyen plus efficace de récupérer les ID d'insertion en masse.
  • Compatibilité avec InnoDB : Exploite les fonctionnalités d'InnoDB moteur de stockage pour garantir l'attribution séquentielle des identifiants lors des insertions groupées.

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!

Déclaration:
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