SqlServer使用MySql创建表,例如auto_increment主键

时间:2020-03-05 18:59:18  来源:igfitidea点击:

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

create table foo  
(  
user_id int not null auto_increment,  
name varchar(50)  
)

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

解决方案

回答

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

回答

像这样

create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)

回答

声明该字段为身份

回答

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

回答

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

CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)

回答

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

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 tablename ON"命令来覆盖此设置。
  • MySQL允许我们更新AUTO_INCREMENT列中的值。 MSSQL拒绝更新IDENTITY列中的值。

回答

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