我可以只使用一个SQL查询进行自动递增和唯一约束吗?

我可以只使用一个SQL查询进行自动递增和唯一约束吗?,sql,database,unique,auto-increment,Sql,Database,Unique,Auto Increment,我有一个SQL数据库。数据库中的表包含一个ID为的列。我想编写一个SQL查询来更改该表,以便ID列的值从1开始自动递增(ID为整数)。所以,我已经有了一个ID为column的表,我只想编写一个查询来修改它,以便自动插入ID列的值。 同一个表中的另一列应该有唯一的值(但不是主键,主键是ID),所以我也需要为此修改表。我能用一个问题来回答这一切吗 在MySQL中,您将对列使用AUTO_INCREMENT属性,SQL Server对列使用Identity属性,Oracle(和SQL Server 20

我有一个SQL数据库。数据库中的表包含一个ID为的列。我想编写一个SQL查询来更改该表,以便ID列的值从1开始自动递增(ID为整数)。所以,我已经有了一个ID为column的表,我只想编写一个查询来修改它,以便自动插入ID列的值。
同一个表中的另一列应该有唯一的值(但不是主键,主键是ID),所以我也需要为此修改表。我能用一个问题来回答这一切吗

在MySQL中,您将对列使用AUTO_INCREMENT属性,SQL Server对列使用Identity属性,Oracle(和SQL Server 2012)对SEQUENCE对象使用

使用MySQL AUTO_INCREMENT属性,您可以在创建表时声明列具有此属性。有关更多信息,请参见此处:

对于SQL Server标识,在创建表时再次为column属性提供一个选项seed和增量值。见BOL:

Oracle具有序列对象(这些对象在2012版本中添加到SQL Server,因此SQL Server 2012同时具有标识和序列对象)。序列是它自己的对象,位于表之外,如果您想使用一个值来管理多个表,这非常好。对于Oracle序列,请参见以下内容:对于SQL Server 2012,请参见以下内容:

有关跨不同平台的自动增量的更多信息,请参见此处:

我认为您不能在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的ALTERTABLE语句采用了多个“ALTER规范”。所以这一条语句确实有效

alter table test
modify column id integer not null auto_increment,
add constraint unique (other_column);


“alter_specification[,alter_specification]…]”部分在一条语句中进行多次修改,这对您来说是一个赢家。

您使用的是哪种DBMS?
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]