关于SQL Server:SqlServer使用MySql像auto_increment主键一样创建表

关于SQL Server:SqlServer使用MySql像auto_increment主键一样创建表

SqlServer create table with MySql like auto_increment primary key

我想在SqlServer中创建一个表,该表将在插入时添加自动递增的主键。 这应该是一个类似于MySql auto_increment功能的自动递增的ID。 (下面)

1
2
3
4
5
create table foo  
(  
user_id int not null auto_increment,  
name varchar(50)  
)

有没有一种方法而无需创建插入触发器?


像这样

1
2
3
4
5
create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)

他们已经回答了您的问题,但是我想为刚使用身份列的人提供一些建议。在某些情况下,您必须返回刚刚插入的身份的值,以便可以将其插入相关表中。许多资料会告诉您使用@@ identity来获取此值。如果要保持数据完整性,在任何情况下都不要使用@@ identity。如果将其中一个添加到另一个表中,它将提供在触发器中创建的标识。由于您不能保证@@ identity的值始终正确,因此最好不要使用@@ identity。使用scope_identity()获取此值。我知道这与主题无关,但是对于您了解如何在SQL Server中使用身份很重要。相信我,您不想解决相关记录具有错误的标识值的问题。在被发现之前,这可能会悄悄地出错几个月,并且之后几乎无法修复数据。


OP请求了自动递增的主键。 IDENTITY关键字本身不会使列成为主键。

1
2
3
4
5
CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)

正如其他人提到的:将IDENTITY属性添加到该列,并使其成为主键。

但是,MSSQL的IDENTITY和MySQL的AUTO_INCREMENT之间存在差异:

  • MySQL要求唯一
    约束(通常以
    主键)
    AUTO_INCREMENT列。
    MSSQL没有这样的要求。
  • MySQL使您可以将值手动插入到AUTO_INCREMENT列中。

    MSSQL阻止您手动将值插入IDENTITY
    柱;如果需要,您可以覆盖
    通过发出" SET
    IDENTITY_INSERT表名ON"
    插入之前的命令。
  • MySQL允许您更新AUTO_INCREMENT列中的值。
    MSSQL拒绝更新
    身份列。

只需将字段设置为身份字段即可。


如上所述,请使用IDENTITY字段。

1
2
3
4
5
CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)

声明该字段为身份


正如其他人所说,只需设置"身份"选项即可。


推荐阅读