【发布时间】:2011-06-29 11:32:51
【问题描述】:
如何将auto_increment 添加到 MySQL 表的现有列中?
【问题讨论】:
标签: mysql auto-increment
如何将auto_increment 添加到 MySQL 表的现有列中?
【问题讨论】:
标签: mysql auto-increment
我想你想MODIFY 列,就像为ALTER TABLE command 描述的那样。可能是这样的:
ALTER TABLE users MODIFY id INTEGER NOT NULL AUTO_INCREMENT;
在上面运行之前确保id 列有一个主索引。
【讨论】:
ALTER TABLE tbl AUTO_INCREMENT = 100;
Alter table table_name modify column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
你应该添加主键来自动递增,否则你会在mysql中出错。
【讨论】:
如果您想更改非空表的 AUTO_INCREMENT 属性,这对我有用:
1.) 将整个表导出为 .sql 文件
2.)导出后删除表
2.) CREATE_TABLE 命令是否需要更改
3.)从 .sql 文件执行 CREATE_TABLE 和 INSERT_INTO 命令
...等中提琴
【讨论】:
只需在列或修改列中添加 auto_increment 约束:-
ALTER TABLE `emp` MODIFY COLUMN `id` INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;
或者先添加一列,然后将列更改为-
1. Alter TABLE `emp` ADD COLUMN `id`;
2. ALTER TABLE `emp` CHANGE COLUMN `id` `Emp_id` INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;
【讨论】:
id 列需要INDEX,但不一定是UNIQUE 或PRIMARY KEY。一个普通的 INDEX 将允许您手动添加一个 dup 值(您不会这样做),但除此之外,它也一样好。
将AUTO_INCREMENT添加到有数据的表中同时避免“重复条目”错误的方法:
使用 INSERT SELECT 复制表和数据:
CREATE TABLE backupTable LIKE originalTable;
INSERT backupTable SELECT * FROM originalTable;
从 originalTable 中删除数据(以删除重复条目):
TRUNCATE TABLE originalTable;
添加AUTO_INCREMENT 和主键
ALTER TABLE originalTable ADD id INT PRIMARY KEY AUTO_INCREMENT;
将数据复制回 originalTable(不要不包含新创建的列 (id),因为它会自动填充)
INSERT originalTable (col1, col2, col3)
SELECT col1, col2,col3
FROM backupTable;
删除备份表:
DROP TABLE backupTable;
希望对你有用!
更多关于使用 CREATE LIKE 复制表的信息:
【讨论】:
originalTable的外键或者你因为其他原因关心id号,那么我认为你不想使用这种方法。
我设法用以下代码做到了这一点:
ALTER TABLE `table_name`
CHANGE COLUMN `colum_name` `colum_name` INT(11) NOT NULL AUTO_INCREMENT FIRST;
这是我可以使列自动递增的唯一方法。
INT(11) 表示最大 int 长度为 11,如果需要,可以跳过。
【讨论】:
FIRST 是一个很好的约定,但这不是必需的。 (11) 什么都不做,除非你也有 ZEROFILL;不要费心指定它。
Alter table table_name modify table_name.column_name data_type AUTO_INCREMENT;
例如:
Alter table avion modify avion.av int AUTO_INCREMENT;
【讨论】:
ALTER TABLE Table name ADD column datatype AUTO_INCREMENT,ADD primary key(column);
【讨论】:
如果您有 FK 约束并且您不想从表中删除约束。使用“索引”而不是主要的。那么您将能够将其类型更改为自动递增
【讨论】:
我在第一列中有现有数据,它们是 0。 首先,我使第一列可以为空。 然后我将列的数据设置为空。 然后我将该列设置为索引。 然后我将其设为主键,并启用了自动递增功能。这是我在上面使用另一个人的答案的地方:
ALTER TABLE `table_name` CHANGE COLUMN `colum_name` `colum_name` INT(11) NOT NULL AUTO_INCREMENT FIRST;
这从一开始为该表的所有行添加了数字。如果我先运行上面的代码,它就不起作用,因为所有的值都是 0。在使其自动递增之前,还需要将其设为索引。 接下来我将该列设为主键。
【讨论】:
SET sql_mode='NO_AUTO_VALUE_ON_ZERO'; 如果由于某种原因由于您有多个零而这不起作用,您可以使用行计数器将所有行显式设置为新数字。
这在我的情况下有效,如果你想将列属性更改为已经有一些数据的自动增量
1.转到结构,选择要更改的列。 2.选择列后,从下面的选项中选择主键。 [1]:https://i.stack.imgur.com/r7w8f.png 3.然后使用alter方法将列属性更改为自增
【讨论】: