【问题标题】:Existing table add auto increment primary key - sql现有表添加自增主键 - sql
【发布时间】:2016-09-11 20:35:22
【问题描述】:

我有一个现有的产品表,它已经填充了 120 条记录,我尝试了以下 SQL 查询:

ALTER TABLE product ADD product_id 
    INT PRIMARY KEY AUTO_INCREMENT

但它给了我错误:

错误:#1075 - 表定义不正确;只能有一个自动列,并且必须定义为一个键

【问题讨论】:

  • 您尝试了哪个查询?
  • ALTER TABLE 产品添加 product_id INT PRIMARY KEY AUTO_INCREMENT;
  • ALTER TABLE product ADD column product_id INT PRIMARY KEY AUTO_INCREMENT;
  • 显示您的表格描述。一个表只能有一个主键,如果您要定义 auto_increment 列,它必须是主键,即您不能将一列作为 auto_increment 而另一列作为主键
  • 我将您推荐给可能有助于回答问题的先前帖子:stackoverflow.com/questions/8114535/…

标签: mysql sql


【解决方案1】:

这是解决方法

  • 使用自动增量创建一个简单的列
  • 浏览表并再次将这个新添加的列设为主键

你已经完成了!

:) 感谢不在 Stackoverflow 中的 Guy

【讨论】:

    【解决方案2】:

    朋友 如果您尝试在 MSSQL 中执行此操作,那么您的脚本将是这个。 假设你的桌子在下面

    create table product
    (
     name varchar(20),
     product_type varchar(20)
    )
    

    并假设您在此表中输入了一些记录,之后您想要添加一个名为 product_id 的列,该列具有自动增量和主键。然后你使用下面的这个脚本

    alter table product add product_ID int primary key identity(1,1)
    

    假设这对你有帮助。

    【讨论】:

      【解决方案3】:

      每个表只能有一个自动增量字段。但是,您可以有一个基于自动增量字段的计算字段。或者,您可以有一个 int 字段,您可以在其中通过前端代码或触发器管理序列。你也可以在 SQL Server 中使用sequence。

      CREATE SEQUENCE MySequence START WITH 100;
      
      CREATE TABLE MyTable
      (
          RealIdentity INT IDENTITY(1,1),
          RandomCol NVARCHAR(100),
          FakeIdentity INT DEFAULT NEXT VALUE FOR MySequence
      );
      

      更新 - MySQL 方式

      我刚刚注意到您的问题被标记为 MySQL。以上答案适用于 MS SQL。以下是在 MySQL 中执行相同操作的方法。

      How do I create a sequence in MySQL?

      MySQL equivalent of Oracle's SEQUENCE.NEXTVAL

      【讨论】:

        猜你喜欢
        • 2011-06-19
        • 1970-01-01
        • 2020-09-01
        • 2012-07-12
        • 2011-02-26
        • 2011-03-22
        • 2021-09-10
        相关资源
        最近更新 更多