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 :
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!