【问题标题】:SqlServer create table with MySql like auto_increment primary keySqlServer 使用 MySql 创建表,如 auto_increment 主键
【发布时间】:2010-09-10 05:54:41
【问题描述】:

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

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

有没有办法在不创建插入触发器的情况下做到这一点?

【问题讨论】:

    标签: mysql sql-server auto-increment


    【解决方案1】:

    像这样

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

    【讨论】:

    • 这不是问题的答案。它完全忽略了自动增量主键问题。为什么还要打勾?
    【解决方案2】:

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

    CREATE TABLE user
    (
      TheKey int IDENTITY(1,1) PRIMARY KEY,
      Name varchar(50)
    )
    

    【讨论】:

    • 很对,为什么另一个打勾是正确答案?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      • MySQL 要求一个唯一的 约束(通常以 主键)被定义为 AUTO_INCREMENT 列。
        MSSQL 没有这样的要求。
      • MySQL 允许您手动将值插入到 AUTO_INCREMENT 列中。
        MSSQL 阻止您手动将值插入 IDENTITY 柱子;如果需要,您可以覆盖 这通过发出“SET IDENTITY_INSERT 表名 ON" 插入之前的命令。
      • MySQL 允许您更新 AUTO_INCREMENT 列中的值。
        MSSQL 拒绝更新 IDENTITY 列。

      【讨论】:

        【解决方案5】:

        只需将该字段设置为identity field

        【讨论】:

          【解决方案6】:

          将字段声明为身份

          【讨论】:

            【解决方案7】:

            如上所述,使用 IDENTITY 字段。

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

            【讨论】:

              【解决方案8】:

              正如其他人所说,只需设置 Identity 选项。

              【讨论】:

                猜你喜欢
                • 2023-03-19
                • 2020-03-09
                • 2019-01-01
                • 2016-11-08
                • 1970-01-01
                • 2011-06-15
                • 2015-03-08
                • 1970-01-01
                • 2020-09-08
                相关资源
                最近更新 更多