2009-05-30 6 views
0

Si je définis une colonne de base de données comme champ de clé primaire de numérotation automatique, la fonction de numérotation automatique empêchera-t-elle la modification de ces valeurs?Est-il possible de modifier la valeur d'un champ de clé primaire d'entier auto-incrémenté?

Ou est-ce que la nature de la clé primaire de la colonne la rend non modifiable?

Les deux? Ni?

+1

Pour obtenir les meilleurs résultats dites quelle base de données vous utilisez. –

+0

Je pensais que c'était un principe assez général que cela s'appliquerait à tous les niveaux. Peut-être pas si simple? – eggdrop

+1

Que s'est-il passé quand vous avez essayé? –

Répondre

2

Ni l'un ni l'autre. Vous pouvez le modifier tout ce que vous voulez. Définir une colonne comme autoincrement spécifie juste la valeur par défaut pour les nouvelles lignes, c'est tout. Après cela, il agit comme une colonne normale.

EDIT: Apparemment, ce n'est pas vrai pour SQL Server, mais vous ne l'avez pas spécifié, donc je suis allé avec la réponse populaire.

4

Comme toujours, cela dépend de votre base de données. Cependant, la réponse est probablement non plus.

Dans SQL Server, vous êtes limité d'insérer manuellement les clés primaires dans une colonne d'identité, sauf si vous utilisez les éléments suivants:

SET IDENTITY_INSERT [dbo].[MyTable] ON 
INSERT INTO [dbo].[MyTable] (id, name) VALUES (1000, 'Foo') 
SET IDENTITY_INSERT [dbo].[MyTable] OFF 
+0

Je pensais que ce serait un problème assez agnostique de base de données. Surpris. – eggdrop

+1

Il existe une comparaison des bases de données communes ici: http://troels.arvin.dk/db/rdbms/#mix-identity –

1

Vouliez-vous dire auto-augmentation?

Dans MS-Sql pas,
Dans mysql oui (peut dépendre du moteur)

+0

Auto-increment, yes. – eggdrop

1

Ce n'est pas DB agnostique. Cependant, MySQL et SQLite (par exemple) vous permettent de modifier les clés primaires autoincrement:

mysql:

create table foo (id INTEGER AUTO_INCREMENT, PRIMARY KEY(id)); 
insert into foo values (null); 
select * from foo; 
update foo set id = 2 where id = 1; 
select * from foo; 

SQLite (voir http://www.sqlite.org/faq.html#q1 pour ce AUTOINCREMENT signifie en réalité):

create table foo(id INTEGER PRIMARY KEY AUTOINCREMENT); 
insert into foo VALUES(null); 
select * from foo; 
update foo set id = 2 where id = 1; 
select * from foo; 
Questions connexes