向现有表插入自动增量主键

我试图修改一个没有主键和 auto _  增量的表。我知道如何添加一个主键列,但我想知道是否可以将数据自动插入到主键列(我在 DB 中已经有500行,想给它们 id,但我不想手动这样做)。有什么想法吗?非常感谢。

272991 次浏览

在我的测试中,添加 PRIMARY KEY列的 ALTER TABLE语句可以正确工作:

ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;

在为测试目的创建的临时表上,上面的语句创建了 AUTO_INCREMENT id列,并为表中的每个现有行插入了自动递增值,从1开始。

是的,像这样的东西可以做到,但可能不是最好的。你可能需要做一个备份:

$get_query = mysql_query("SELECT `any_field` FROM `your_table`");


$auto_increment_id = 1;


while($row = mysql_fetch_assoc($get_query))
{
$update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = '".$row['any_field']."'");
$auto_increment_id++;
}

请注意,更新时选择的 any_field必须相同。

对于那些像我一样得到 Multiple primary key defined错误尝试:

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

在 MySQL v5.5.31上,这将 id列设置为我的主键,并用递增值填充每一行。

假设您没有像 id 这样的自动增量列,那么您可以使用以下查询进行添加:

ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST

如果您有列,那么使用以下查询更改为自动增量:

 ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY

我发现最简单最快的就是这个

ALTER TABLE mydb.mytable
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);

我能够调整这些指令,使用一个 存在非增量主键的表,并向表中添加一个增量主键,然后使用以下代码创建一个新的复合主键,其中新旧键都作为复合主键:

DROP TABLE  IF EXISTS SAKAI_USER_ID_MAP;


CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID             VARCHAR (99) NOT NULL,
EID                 VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);


INSERT INTO SAKAI_USER_ID_MAP VALUES ('admin', 'admin');
INSERT INTO SAKAI_USER_ID_MAP VALUES ('postmaster', 'postmaster');


ALTER TABLE  SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY ( _USER_ID, USER_ID );

完成此操作后,_ USER _ ID 字段就存在了,并且主键的所有数值都与您预期的一样。使用顶部的“ DROPTABLE”,您可以一遍又一遍地运行它来实验各种变化。

我还没有能够得到工作的情况下,有传入的外国键已经指向 USER _ ID 字段。当我尝试使用来自另一个表的传入外键做一个更复杂的示例时,会得到这个消息。

#1025 - Error on rename of './zap/#sql-da07_6d' to './zap/SAKAI_USER_ID_MAP' (errno: 150)

我猜测我需要在执行 ALTER 表之前删除所有外键,然后再重新构建它们。但是现在,我想分享这个解决方案,一个更具挑战性的版本的原始问题,以防其他人遇到这种情况。

导出表,然后清空表,然后将字段添加为惟一 INT,然后将其更改为 AUTO _ INCREMENT,然后再次导入先前导出的表。

如何编写 PHP 更改已经存在的字段(名称,在这个例子中) ,使其成为主键?当然,W/o 将任何额外的“ id”字段添加到表中。.

这是一个当前创建的表-找到的记录数量: 4名 VARCHAR (20) YES 品种 VARCHAR (30)是的 颜色 VARCHAR (20)是的 重量史密林特(7)是

这是一个最终的结果(表描述)-

发现的记录数: 4 名称 VARCHAR (20) NO PRI 品种 VARCHAR (30)是的 颜色 VARCHAR (20)是的 重量史密林特(7)是

而不是得到这个

找到的记录数量: 5 Id int (11) NO PRI 名字 VARCHAR (20)是 品种 VARCHAR (30)是的 颜色 VARCHAR (20)是的 重量史密林特(7)是

在尝试之后。

$query = “ ALTER TABLE racehorse ADD id INT NOT NULL AUTO _ INCREMENT FIRST,ADD PRIMARY KEY (id)”;

如何得到这个

发现的记录数: 4 名称 VARCHAR (20) NO PRI 品种 VARCHAR (30)是的 颜色 VARCHAR (20)是的 重量史密林特(7)是

例如,INSERT/ADD. . etc 主键 INTO 第一个字段记录(w/o 添加一个额外的‘ id’字段,如前所述。

可以使用以下命令向现有表中添加新的主键列,该列可以具有序号:

ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY

我也面临同样的问题,所以我删除了主键的字段,然后重新创建它,并确保它是自动增量的。这招对我管用。我希望它能帮助别人

修改表 TableName修改 TableNameID 中等非空 自动增量;

这里 TableName是您的表的名称,

TableName 是必须修改的主列名

MEDIUMINT 是现有主键的数据类型

AUTO _ INCREMENT 必须在 not null 后面添加 AUTO _ 

它将使主键 auto _ growth... ..。

希望这对你有帮助:)

你有很多方法可以做到: - 如果表中没有任何数据,只需删除它并重新创建它。

删除现有字段并像这样重新创建它

ALTER TABLE test DROP PRIMARY KEY, DROP test_id, ADD test_id int AUTO_INCREMENT NOT NULL FIRST, ADD PRIMARY KEY (test_id);

或者只是修改一下

ALTER TABLE test MODIFY test_id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (test_id);

为了使现有的主键成为 auto_increment,您可以使用:

ALTER TABLE table_name MODIFY id INT AUTO_INCREMENT;

没有现有的主键


ALTER TABLE `db`.`table`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (`id`);
;


表已经有一个现有的主键的列

(它不会删除旧的主键列)

ALTER TABLE `db`.`table`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST,
CHANGE COLUMN `prev_column` `prev_column` VARCHAR(2000) NULL ,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`);
;


注意: 对于自动递增,列必须放在第一位,这就是 FIRST 命令的原因。