2009-05-30 8 views
0

Wenn ich eine Datenbankspalte als AutoNummer-Primärschlüsselfeld einstelle, verhindert die automatische Nummerierung, dass diese Werte geändert werden können?Ist es möglich, den Wert eines Ganzzahl-Primärschlüsselfelds mit automatischer Inkrementierung zu ändern?

Oder macht der Primärschlüssel der Säule es unmodifizierbar?

Beide? Weder?

+1

Für beste Ergebnisse Sagen Sie, welche Datenbank Sie verwenden. –

+0

Ich dachte, das wäre ein allgemein genug Prinzip, dass es auf der ganzen Linie gelten würde. Vielleicht nicht so einfach? – eggdrop

+1

Was ist passiert, als du es versucht hast? –

Antwort

2

Weder. Sie können alles ändern, was Sie wollen. Das Setzen einer Spalte als Autoinkrement gibt nur den Standardwert für neue Zeilen an, das ist es. Danach verhält es sich wie eine normale Spalte.

EDIT: Offenbar dies ist nicht wahr für SQL Server, aber Sie haben nicht angegeben, also ging ich nur mit der beliebten Antwort.

4

Wie immer hängt es von Ihrer Datenbank ab. Die Antwort ist aber wahrscheinlich auch nicht.

In SQL Server, werden Sie von Einfügen Primärschlüssel manuell in eine Identitätsspalte beschränkt, es sei denn, Sie die folgende verwenden:

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

Ich dachte, das wäre ein ziemlich datenbankunabhängiges Problem. Überrascht. – eggdrop

+1

Es gibt einen Vergleich von allgemeinen Datenbanken hier: http://troels.arvin.dk/db/rdbms/#mix-identity –

1

Sie bedeuten Autoinkrement Haben?

In MS-SQL nein,
In mysql ja (kann auf Motor ab)

+0

Auto-Inkrement, ja. – eggdrop

1

Es ist nicht DB-Agnostiker. Allerdings, MySQL und SQLite (zum Beispiel) können Sie autoincrement Primärschlüssel ändern:

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 (siehe http://www.sqlite.org/faq.html#q1 für das, was AUTOINCREMENT eigentlich bedeutet):

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; 
Verwandte Themen