Maison > base de données > tutoriel mysql > Comment puis-je incrémenter automatiquement une colonne dans une clé primaire multi-colonnes ?

Comment puis-je incrémenter automatiquement une colonne dans une clé primaire multi-colonnes ?

Barbara Streisand
Libérer: 2024-12-13 08:11:10
original
725 Les gens l'ont consulté

How Can I Auto-Increment a Column in a Multi-Column Primary Key?

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

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

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');
Copier après la connexion
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          |
+----------+-------------+--------------+
Copier après la connexion

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!

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