Maison >base de données >tutoriel mysql >Comment puis-je incrémenter automatiquement une colonne dans une clé primaire multi-colonnes ?
Utiliser l'incrémentation automatique sur une clé primaire multicolonne
Maintenir l'intégrité des données dans les bases de données peut être un défi. En utilisant deux colonnes comme clé primaire composite, vous pouvez garantir le caractère unique de chaque ligne. Cependant, il est essentiel de réfléchir à la manière de gérer l'identification unique des lignes lors de l'auto-incrémentation d'une des colonnes.
L'utilisation d'AUTO_INCREMENT dans MyISAM
Le moteur de stockage MyISAM vous permet pour spécifier AUTO_INCREMENT sur une colonne non principale dans un index à plusieurs colonnes. La valeur d'incrémentation automatique est calculée comme MAX(auto_increment_column) 1 où un préfixe donné correspond. Ceci est particulièrement utile lors de l'organisation des données en groupes ordonnés.
Exemple d'utilisation :
CREATE TABLE animals ( grp ENUM('fish','mammal','bird') NOT NULL, id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (grp,id) ) ENGINE=MyISAM;
Dans cet exemple, l'identifiant est auto-incrémenté en fonction de la valeur de grp .
Application à votre exemple :
Pour votre besoin spécifique, vous pouvez créer la structure de table suivante :
CREATE TABLE mytable ( table_id MEDIUMINT NOT NULL AUTO_INCREMENT, database_id MEDIUMINT NOT NULL, other_column CHAR(30) NOT NULL, PRIMARY KEY (database_id,table_id) ) ENGINE=MyISAM;
Exemples de données et de résultats :
INSERT INTO mytable (database_id, other_column) VALUES (1,'Foo'),(1,'Bar'),(2,'Baz'),(1,'Bam'),(2,'Zam'),(3,'Zoo');
SELECT * FROM mytable ORDER BY database_id,table_id; +----------+-------------+--------------+ | table_id | database_id | other_column | +----------+-------------+--------------+ | 1 | 1 | Foo | | 2 | 1 | Bar | | 3 | 1 | Bam | | 1 | 2 | Baz | | 2 | 2 | Zam | | 1 | 3 | Zoo | +----------+-------------+--------------+
Comme vous pouvez le voir, table_id est auto-incrémenté pour chaque database_id unique. Cela garantit à la fois le caractère unique de chaque ligne et le regroupement ordonné des lignes en fonction de database_id.
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!