Maison >base de données >tutoriel mysql >Comment obtenir un incrémentation automatique dans une clé composite dans MySQL ?

Comment obtenir un incrémentation automatique dans une clé composite dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 05:24:03247parcourir

How to Achieve Auto Increment in a Composite Key in MySQL?

Définir une clé composite avec incrémentation automatique dans MySQL : un défi

La création d'une clé composite avec une colonne à incrémentation automatique peut présenter un défi dans MySQL. Cela est particulièrement vrai pour les tables InnoDB, qui imposent certaines restrictions.

Scénario et erreur :

Considérez le schéma de table suivant :

CREATE  TABLE `issue_log` (
`sr_no` INT NOT NULL AUTO_INCREMENT ,
  `app_id` INT NOT NULL ,
  `test_id` INT NOT NULL ,
  `issue_name` VARCHAR(255) NOT NULL ,
primary key (app_id, test_id,sr_no)
);

Une tentative d'exécution de cette requête peut entraîner l'erreur suivante :

ERROR 1075: Incorrect table definition; there can be only one auto column and it must be defined as a key

Objectif :

Le comportement souhaité est que la colonne sr_no s'incrémente automatiquement pour des combinaisons uniques de app_id et test_id.

Limitations et solutions :

Les tables InnoDB n'autorisent qu'une seule colonne à incrémentation automatique. Par conséquent, le comportement souhaité ne peut pas être obtenu directement via la définition du schéma.

Alternatives :

Une solution pour surmonter cette limitation consiste à utiliser un déclencheur ou une procédure pour incrémenter manuellement la colonne sr_no en fonction des critères. Par exemple, le déclencheur suivant peut être utilisé :

DELIMITER $$

CREATE TRIGGER xxx BEFORE INSERT ON issue_log
FOR EACH ROW BEGIN
    SET NEW.sr_no = (
       SELECT IFNULL(MAX(sr_no), 0) + 1
       FROM issue_log
       WHERE app_id  = NEW.app_id
         AND test_id = NEW.test_id
    );
END $$

DELIMITER ;

Autres considérations :

  • Les déclencheurs et les procédures peuvent ajouter une surcharge à la base de données.
  • Les moteurs de base de données alternatifs, tels que MyISAM, peuvent prendre en charge l'incrémentation automatique sur plusieurs colonnes au sein d'une clé composite.

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