是否可以更改自动增量整数主键字段的值?

时间:2009-05-30 04:05:33

标签: database primary-key

如果我将数据库列设置为自动编号主键字段,自动编号功能是否会阻止这些值可修改?

或者列的主键性质是否使其不可修改?

两个?既不?

4 个答案:

答案 0 :(得分:4)

一如既往,这取决于您的数据库。但是,答案可能都不是。

在SQL Server中,除非您使用以下内容,否则您无法手动将主键插入标识列:

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

答案 1 :(得分:2)

都不是。您可以随意修改它。将列设置为自动增量只是指定新行的默认值,即它。之后,它就像一个普通的列。

编辑:显然,对于SQL Server,情况并非如此,但您没有指定,所以我只是选择了流行的答案。

答案 2 :(得分:1)

你的意思是自动增量吗?

在MS-Sql中,没有 在mysql中是(可能取决于引擎)

答案 3 :(得分: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(请参阅http://www.sqlite.org/faq.html#q1了解AUTOINCREMENT的实际含义):

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;