Est-il possible d'incrémenter automatiquement une clé non primaire?
Table "book_comments"
book_id medium_int
timestamp medium_int
user_id medium_int
vote_up small_int
vote_down small_int
comment text
comment_id medium_int
Primary key -> (book_id, timestamp, user_id)
Il n'y aura pas d'autres index sur cette table. Cependant, je voudrais faire l'auto-incrémentation de la colonne comment_id
afin de pouvoir facilement créer une autre table:
Table "book_comments_votes"
comment_id (medium_int)
user_id (medium_int)
Primary key -> (comment_id, user_id)
Les utilisateurs ne pourraient voter qu'une seule fois par commentaire de livre. Cette table applique cette règle par la clé primaire.
Question:
Est-il possible d’auto-incrémenter une clé autre que la clé primaire - comme dans l’incrémentation automatique de la colonne comment_id
dans la table "book_comments"?
Alternatives, discussion:
Je voudrais faire ceci pour la simplicité comme expliqué ci-dessus. Les alternatives ne sont pas prometteuses.
book_id, timestamp, user_id
. Dans ce cas, je créerais un index supplémentaire.book_comments_votes
par la PK entière. Cela ferait plus que tripler la taille de la table.Suggestions? Pensées?
Oui, vous pouvez. Vous devez juste faire de cette colonne un index.
CREATE TABLE `test` (
`testID` int(11) NOT NULL,
`string` varchar(45) DEFAULT NULL,
`testInc` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`testID`),
KEY `testInc` (`testInc`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into test(
testID,
string
)
values (
1,
'Hello'
);
insert into test(
testID,
string
)
values (
2,
'world'
);
Insérera des lignes avec des valeurs auto-incrémentées pour 'testInc'. Cependant, c'est une chose vraiment stupide à faire.
Vous avez déjà dit la bonne façon de le faire:
"Créez la clé publique comment_id et appliquez l’intégrité au moyen d’un index unique sur book_id, timestamp, user_id."
C'est exactement la façon dont vous devriez le faire. Non seulement il vous fournit une clé primaire appropriée pour la table dont vous aurez besoin pour les requêtes futures, mais il satisfait également le principe du moindre étonnement .
Depuis MySQL 5.5, cela semble être possible sans un index ou clé primaire un champ INT à fournir avec auto-incrémentation.