Maison > base de données > tutoriel mysql > Comment implémenter une clé primaire à incrémentation automatique sur plusieurs colonnes dans MySQL ?

Comment implémenter une clé primaire à incrémentation automatique sur plusieurs colonnes dans MySQL ?

Mary-Kate Olsen
Libérer: 2024-12-11 10:43:10
original
639 Les gens l'ont consulté

How to Implement a Multiple-Column Auto-Increment Primary Key in MySQL?

Utilisation d'une clé primaire à incrémentation automatique sur plusieurs colonnes avec incrémentation automatique sur la colonne secondaire

Le maintien de l'intégrité des données dans les bases de données avec des structures partagées peut être crucial. Dans le cadre de votre stratégie, vous envisagez d'utiliser deux colonnes comme clé primaire commune, l'une étant un identifiant de base de données et l'autre une clé de table. Cependant, vous souhaitez définir la clé de table pour qu'elle s'incrémente automatiquement en fonction de l'identifiant de la base de données.

Pour MySQL, vous disposez d'options en fonction du moteur de stockage que vous utilisez. Si vous utilisez MyISAM, vous pouvez tirer parti de sa capacité à spécifier AUTO_INCREMENT sur une colonne secondaire dans un index à plusieurs colonnes.

Pour comprendre comment cela fonctionne, considérons l'exemple suivant :

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 ce tableau, les colonnes grp et id forment la clé primaire composite. La colonne id s'incrémente automatiquement, mais son calcul de valeur prend en compte le préfixe (dans ce cas, la valeur grp).

Application de ce concept à votre scénario :

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

Insérer des exemples de données :

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

Interrogation de la table :

SELECT * FROM mytable ORDER BY database_id,table_id;
Copier après la connexion

Cela renverra des résultats regroupés par database_id avec des valeurs table_id auto-incrémentées pour chaque groupe.

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