0

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

4

2 回答 2

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/图书馆/ff878091.aspx

有关跨不同平台的自动增量的更多信息,请参见此处:http: //www.w3schools.com/sql/sql_autoincrement.asp

于 2013-05-11T15:56:59.563 回答
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 的 ALTER TABLE 语法图...

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
    [alter_specification [, alter_specification] ...]
    [partition_options]

读取“[alter_specification [, alter_specification] ...]”的部分在单个语句中进行多项修改,这对您来说是赢家。

于 2013-05-11T17:22:03.503 回答