2009-05-30 4 views
0

データベースの列を自動番号の主キーフィールドとして設定すると、自動番号設定機能によってこれらの値が変更できなくなりますか?自動インクリメントの整数主キーフィールドの値を変更することはできますか?

または、列の主キーの性質によって、変更不可能になりますか?

どちらも?どちらも?

+1

どのデータベースを使用しているか –

+0

私は、これが一般的な原則だと思って、全面的に適用されるでしょう。おそらくそれほど単純ではないでしょうか? – eggdrop

+1

試したときに何が起こったのですか? –

答えて

2

どちらもありません。あなたはそれを必要なだけ変更することができます。 autoincrementとして列を設定するだけで、新しい行のデフォルト値を指定するだけです。その後、通常の列のように機能します。

EDIT:明らかにこれはSQL Serverでは当てはまりませんが、指定しなかったので、普及した回答になっただけです。

4

いつものように、それはあなたのデータベースによって異なります。しかし、その答えはおそらくどちらもありません。 SQL Serverでの

、あなたは以下を使用しない限り、あなたは、ID列に手動で主キーを挿入することが制限されています

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

これはかなりデータベースに依存しない問題だと思いました。驚いた。 – eggdrop

+1

一般的なデータベースの比較があります:http://troels.arvin.dk/db/rdbms/#mix-identity –

1

あなたは自動インクリメントを意味しましたか?

ない、MySQLでは
がYES(エンジンに依存してもよい)MS-SQLで

+0

自動インクリメント、はい。 – eggdrop

1

それはDBに依存しないではありません。しかし、MySQLと(例えば)のSQLiteを使用すると、自動インクリメントの主キーを変更することができます:

の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の(AUTOINCREMENTが実際に何を意味するのかについてhttp://www.sqlite.org/faq.html#q1を参照してください):最良の結果を得るため

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; 
関連する問題