Maison >base de données >tutoriel mysql >Comment implémenter l'incrémentation automatique sur une colonne de clé primaire secondaire dans MySQL ?

Comment implémenter l'incrémentation automatique sur une colonne de clé primaire secondaire dans MySQL ?

DDD
DDDoriginal
2024-12-13 16:16:11846parcourir

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

Réalisation de l'incrémentation automatique sur une colonne de clé primaire secondaire dans MySQL

Dans les situations où le maintien de l'intégrité des données est crucial, l'utilisation de deux colonnes comme clé primaire peut être une solution appropriée approche. Cependant, des problèmes peuvent survenir lorsque vous tentez de définir l'incrémentation automatique sur l'une des colonnes en fonction d'une valeur spécifique dans l'autre.

Pour les utilisateurs de MySQL, il existe deux options à considérer pour résoudre ce problème :

Utilisation du moteur MyISAM avec AUTO_INCREMENT

Pour les tables avec le moteur MyISAM, vous pouvez exploiter l'attribut AUTO_INCREMENT sur une colonne secondaire dans un index à plusieurs colonnes. La valeur d'incrémentation automatique de la colonne secondaire est calculée comme suit :

MAX(auto_increment_column) + 1 WHERE prefix=given-prefix

Cette technique vous permet de regrouper les données en ensembles ordonnés en fonction de la valeur de la colonne de préfixe.

Par exemple :

Considérez la table suivante nommée mytable avec deux colonnes de clé primaire, database_id et table_id :

CREATE TABLE mytable (
  database_id MEDIUMINT NOT NULL,
  table_id MEDIUMINT NOT NULL AUTO_INCREMENT,
  other_column CHAR(30) NOT NULL,
  PRIMARY KEY (database_id,table_id)
) ENGINE=MyISAM;

L'insertion de données dans mytable incrémentera automatiquement le table_id pour chaque valeur unique de database_id :

INSERT INTO mytable (database_id, other_column) VALUES
(1,'Foo'),(1,'Bar'),(2,'Baz'),(1,'Bam'),(2,'Zam'),(3,'Zoo');

Lorsque vous récupérez des données de la table, les lignes seront classées en fonction de les colonnes database_id et table_id :

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          |
+----------+-------------+--------------+

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