如何将AUTO_INCREMENT添加到现有列?

mpe*_*pen 65 mysql auto-increment

如何添加auto_increment到MySQL表的现有列?

Don*_*kby 96

我想你想要MODIFY对该ALTER TABLE命令所描述的列.它可能是这样的:

ALTER TABLE users MODIFY id INTEGER NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

在运行之前,请确保该id列具有主索引.

  • 如果表中已有值,则可能会获得值为1的重复键错误.要更改AUTO_INCREMENT的值,表必须使用MyISAM引擎.因此,转到表属性,将引擎从InnoDB更改为MyISAM,然后将AUTO_INCREMENT值更改为序列中的下一个值.应用这些更改后,您可以将引擎切换回您使用的任何位置. (14认同)
  • 可能还想将当前列值包括为偏移量,例如`ALTER TABLE tbl AUTO_INCREMENT = 100;` (9认同)

Ari*_*sta 16

将AUTO_INCREMENT添加到包含数据的表,同时避免" 重复输入 "错误的方法:

  1. 使该表的副本使用INSERT SELECT中的数据:

    CREATE TABLE backupTable LIKE originalTable; 
    INSERT backupTable SELECT * FROM originalTable;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从originalTable中删除数据(删除重复的条目):

    TRUNCATE TABLE originalTable;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加AUTO_INCREMENT PRIMARY KEY

    ALTER TABLE originalTable ADD id INT PRIMARY KEY AUTO_INCREMENT;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 数据复制回originalTable(做包括新创建的列(id),因为它将自动填充)

    INSERT originalTable (col1, col2, col3) 
    SELECT col1, col2,col3
    FROM backupTable;
    
    Run Code Online (Sandbox Code Playgroud)
  5. 删除backupTable:

    DROP TABLE backupTable;
    
    Run Code Online (Sandbox Code Playgroud)

我希望这很有用!

有关使用CREATE LIKE重复表的更多信息:

复制MySQL表,索引和数据

  • 这对我来说看起来非常危险,因为记录很容易以与开始时不同的 ID 号结束。如果其他表有 `originalTable` 的外键,或者您出于其他原因关心 id 号,那么我认为您不想使用此方法。 (5认同)

小智 10

Alter table table_name modify column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)

您应该将主键添加到自动增量,否则您在mysql中出错.

  • 但如果该列已经是主键,您将收到类似“ERROR 1068 (42000): Multiple primary key defined”的错误消息。 (7认同)

Zig*_*612 5

只需在列或MODIFY COLUMN中添加auto_increment约束即可:-

 ALTER TABLE `emp` MODIFY COLUMN `id` INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;
Run Code Online (Sandbox Code Playgroud)

或先添加一列,然后将其更改为-

1. Alter TABLE `emp` ADD COLUMN `id`;

2. ALTER TABLE `emp` CHANGE COLUMN `id` `Emp_id` INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;
Run Code Online (Sandbox Code Playgroud)