【问题标题】:Add Auto-Increment ID to existing table?将自动增量 ID 添加到现有表?
【发布时间】:2013-01-23 01:59:05
【问题描述】:

我有一个预先存在的表,其中包含“fname”、“lname”、“email”、“password”和“ip”。但现在我想要一个自动增量列。但是,当我输入时:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

我得到以下信息:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

有什么建议吗?:)

【问题讨论】:

  • 你能发布你现有的表定义吗?
  • 请发布describe users的输出
  • 试过了,但它只是返回表格。你需要什么?
  • @CharlesJenkins 你能选择正确的答案吗?
  • MODIFY 也可以用作: ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT ; /* 2019 年 8 月 */

标签: mysql sql definition auto-increment


【解决方案1】:

试试这个

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT;

对于现有的主键

【讨论】:

  • #1068 - 定义了多个主键
  • 在 SQL Server 2008 中,将 'AUTO_INCREMENT' 替换为 'IDENTITY(1,1)' 对我有用。
  • 请注意,这会添加一个 ID 列作为表中的最后一列。将FIRST 添加到查询中,使其成为该表中的第一个。
  • @CharlesJenkins 为避免“多主键”错误,请在定义新主键之前删除现有主键:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
  • 要将其设为第一列,请使用FIRST 例如ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
【解决方案2】:

如果你不关心 auto-id 是否用作PRIMARY KEY,你可以这样做

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

我刚做了这个,效果很好。

【讨论】:

  • 这对我有用,并将 auto_increment id 列设置为主键。
  • FIRST 在那里做什么?
  • @Cees Timmerman:关键字 FIRST 表示新列将是表中的第一列。或者,您可以使用 AFTER exists_col_name 指定特定位置。如果既不使用 FIRST 也不使用 AFTER,则在所有当前列之后添加新列。
  • 如果我想在 id 上创建索引而不是 PK 怎么办?
  • @morpheus 这添加了一个 UNIQUE 索引,它本身就是一个索引。我不喜欢有一个名为 id 但不是 PK 的列。
【解决方案3】:

如果要在现有表中添加 AUTO_INCREMENT,需要运行以下 SQL 命令:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key

【讨论】:

  • 那行不通!收到此错误:#1068 - 定义了多个主键
  • 你会得到Multiple primary key defined,因为你已经在表上有一个主键。一张表只能有一个主键。在没有主键的表上重试上述命令
  • 为避免“多主键”错误,请在定义新主键之前删除现有主键:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
【解决方案4】:

首先你必须删除表的主键

ALTER TABLE nametable DROP PRIMARY KEY

现在你可以添加自动增量...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY

【讨论】:

  • 不能删除,然后添加 id。会得到Duplicate column name 'id'
  • @JohnJoe,那是因为您已经有了 id 列。试试这个:ALTER TABLE nametable DROP PRIMARY KEY, MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
【解决方案5】:

嗯,你必须先删除已有的auto_incrementprimary key,然后添加你的,如下:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;

【讨论】:

  • 收到此错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“LTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)”附近使用正确的语法
  • 看看你发布的代码错过了 LTER 而不是 ALter,确保你复制了所有代码
  • 谢谢,但现在我遇到了这个错误:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以便在第 3 行的“ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY(id)”附近使用正确的语法对不起!
  • 得到这个:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“(id)”附近使用正确的语法
  • 你可以在我的回答中按照这些步骤操作
【解决方案6】:

如果你运行以下命令:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

这将显示错误:

ERROR 1060 (42S21): Duplicate column name 'id'

这是因为此命令会尝试将名为 id 的新列添加到现有表中。

要修改现有列,您必须使用以下命令:

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

这应该适用于更改现有的列约束......!

【讨论】:

    【解决方案7】:

    如果存在,则删除表的主键:

     ALTER TABLE `tableName` DROP PRIMARY KEY;
    

    向表中添加自增列:

    ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;
    

    修改我们想要作为主键的列:

    alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
    

    【讨论】:

      【解决方案8】:

      只需将 ADD 更改为 MODIFY 即可!

      替换

      ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT
      

      ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;
      

      【讨论】:

        【解决方案9】:
        ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT
        

        整数参数基于我的默认 sql 设置 祝你有美好的一天

        【讨论】:

          【解决方案10】:
          ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
          

          【讨论】:

            【解决方案11】:

            对于 PostgreSQL,您必须使用 SERIAL 而不是 auto_increment。

            ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY
            

            【讨论】:

              【解决方案12】:
              ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique
              

              试试这个。无需删除主键。

              【讨论】:

                【解决方案13】:

                这个 SQL 请求对我有用:

                ALTER TABLE users
                CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT ;
                

                【讨论】:

                  【解决方案14】:

                  从表中删除主索引:

                  ALTER TABLE `tableName` DROP INDEX `PRIMARY`;
                  

                  然后添加 id 列(没有主索引)。我使用了大整数,因为我将拥有大量数据,但 INT(11) 应该也能正常工作:

                  ALTER TABLE `tableName` ADD COLUMN `id` BIGINT(11) NOT NULL FIRST;
                  

                  然后使用自动增量修改列(感谢 php)。它必须是主键:

                  ALTER TABLE `tableName ` MODIFY COLUMN `id` BIGINT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
                  

                  我刚刚在我的一张桌子上试过这个,它似乎奏效了。

                  【讨论】:

                  • 也可以在单个查询中执行最后两个步骤:ALTER TABLE PremiumPackages ADD COLUMN id MEDIUMINT(8) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
                  【解决方案15】:

                  检查已经存在的具有不同列的主键。如果是,请使用以下命令删除主键:

                  ALTER TABLE Table1
                  DROP CONSTRAINT PK_Table1_Col1
                  GO
                  

                  然后按原样编写您的查询。

                  【讨论】:

                    【解决方案16】:

                    这样继续:

                    Make a dump of your database first
                    
                    Remove the primary key like that
                    

                    ALTER TABLE yourtable DROP PRIMARY KEY

                    Add the new column like that
                    

                    ALTER TABLE yourtable 添加列 Id INT NOT NULL AUTO_INCREMENT FIRST,添加主 KEY Id(Id)

                    将查看表格并更新 AutoInc。

                    【讨论】:

                      猜你喜欢
                      • 2016-07-23
                      • 2016-05-29
                      • 2019-01-18
                      • 2015-06-05
                      • 2011-06-19
                      • 1970-01-01
                      • 2020-09-05
                      相关资源
                      最近更新 更多