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中使用身份很重要。相信我,我们不想解决相关记录具有错误的标识值的问题。在被发现之前的几个月中,这可能会悄悄地出错,并且以后几乎不可能修复数据。