如何向 MySQL 表添加主键?

这是我尝试过的,但失败了:

alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;

有人有小费吗?

285688 次浏览

添加列之后,始终可以添加主键:

ALTER TABLE goods ADD PRIMARY KEY(id)

至于为什么你的脚本不工作,你需要指定 PRIMARY KEY,而不仅仅是字 PRIMARY:

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

删除报价正常工作..。

alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;

Try this,

alter table goods add column `id` int(10) unsigned primary key auto_increment

This code work in my mysql db:

ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);

如果你的桌子很大,最好不要使用这个语句:

alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;

因为它复制了临时表中的所有数据,所以要修改表,然后再复制回来。 最好手动操作。 重命名表:

rename table goods to goods_old;

创建带有主键和所有必要索引的新表:

create table goods (
id  int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);

将旧表中的所有数据移动到新表中,禁用键和索引,以加快复制速度:

——对于 MyISAM表使用这个:

SET UNIQUE_CHECKS=0;
ALTER TABLE goods DISABLE KEYS;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;

或者

——对于 InnoDB表使用这个:

SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; COMMIT; SET AUTOCOMMIT = 1;

将 PK 添加到行数约为200mln 的表中需要2000秒。

现有栏目

If you want to add a primary key constraint to an existing column all of the previously listed syntax will fail.

若要向现有列添加主键约束,请使用以下窗体:

ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

不确定这对其他人是否重要,但我更喜欢表的 id 作为数据库中的第一列。它的语法是:

ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;

和第一个答案相比,这只是一个小小的进步。如果你想让它处于不同的位置,那么

ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;

HTH, -ft

ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;

使用这个查询,

alter table `table_name` add primary key(`column_name`);

For me, none of suggestions worked giving me the errors of syntax, so I just gave a try using phpmyadmin(version 4.9.2), (10.4.10-MariaDB) and added id column with auto-increment primary key. Id column was nicely added from the first element.

查询输出为:

修改表 table_name,首先添加 id INT 非空自动增量,然后添加主键(id) ;

ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

如果您以前已经有一个或多个主键,并且希望包含更多列作为主键,则需要在语句中添加 DROP PRIMARY KEY,并在 ADD PRIMARY KEY部分中重新提到以前的键和新的键。请看下面的示例。.

以前,my_test_table只有一个名为 old_key的主键列。

ALTER TABLE my_test_table ADD COLUMN new_key INT; -- Or whatever data type you need

如果我们想让表的主键设置为 {old_key, new_key},那么可以使用以下语句:

ALTER TABLE my_test_table
DROP PRIMARY KEY, -- You have to add this
ADD PRIMARY KEY(
old_key,      -- Re-mention the old key
new_key       -- And mention also the new one
);