我有一个SQL数据库。数据库中的表包含一个ID列。我想编写一个改变该表的SQL查询,以便ID列的值自动递增(ID为整数),从1开始。所以,我已经有一个带有ID列的表,我只想写一个查询到改变它,以便自动插入ID列的值。 同一个表中的另一列应该具有唯一值(但不是主键,主键是ID),因此我也需要更改表。我可以只用一个查询来覆盖这一切吗?
答案 0 :(得分:1)
在MySQL中,您将在列上使用AUTO_INCREMENT属性,SQL Server在列上具有Identity属性,Oracle(和SQL Server 2012)具有SEQUENCE对象。
使用MySQL AUTO_INCREMENT属性,在创建表时声明该列具有此属性。有关详细信息,请参阅此处:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
对于SQL Server标识,在创建表时,再次为列属性提供选项种子和增量值。请参阅BOL:http://msdn.microsoft.com/en-us/library/aa933196(v=sql.80).aspx
Oracle有SEQUENCE对象(这些对象在2012版本中添加到SQL Server中,因此SQL Server 2012同时具有Identity和SEQUENCE对象)。 SEQUENCE是它自己的对象并且存在于表之外,如果你想使用一个值来管理许多表,这非常好。对于Oracle SEQUENCE,请参阅:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6015.htm对于SQL Server 2012,请参阅:http://msdn.microsoft.com/en-us/library/ff878091.aspx
有关跨不同平台的自动增量的详细信息,请参阅此处:http://www.w3schools.com/sql/sql_autoincrement.asp
答案 1 :(得分:0)
我认为你无法在MySQL的单个语句中执行此操作;你总是可以在一次交易中完成。
create table test (
id integer not null,
primary key (id),
other_column char(1) not null
);
begin;
alter table test
modify column id integer not null auto_increment;
alter table test
add constraint unique (other_column);
commit;
但事实证明,MySQL的ALTER TABLE语句需要多个“更改规范”。所以这个单一的陈述确实有效。
alter table test
modify column id integer not null auto_increment,
add constraint unique (other_column);
MySQL's syntax diagram for ALTER TABLE ...
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
读取“[alter_specification [,alter_specification] ...]”的部分会在单个声明中对您进行多次修改。