如何将主键添加到MySQL表?

时间:2011-02-27 11:27:10

标签: mysql

这是我尝试的但它失败了:

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

有人有小费吗?

10 个答案:

答案 0 :(得分:186)

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

ALTER TABLE goods ADD PRIMARY KEY(id)

至于您的脚本无效的原因,您需要指定PRIMARY KEY,而不仅仅是PRIMARY这个词:

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

答案 1 :(得分:11)

如果您的表格更好,请不要使用以下语句:

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

因为它复制了临时表中的所有数据,alter table然后将其复制回来。 最好手动完成。 重命名你的桌子:

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;

OR

- 使用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添加到行约2亿行的表中需要2 000秒。

答案 2 :(得分:10)

现有列

如果要向现有列添加主键约束,则所有先前列出的语法都将失败。

要向现有列添加主键约束,请使用以下格式:

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

答案 3 :(得分:1)

此代码在我的mysql db中工作:

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

答案 4 :(得分:1)

不确定这是否对其他人有影响,但我更喜欢将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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

试试这个,

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

答案 7 :(得分:0)

使用此: alter table table_name 添加主键( column_name );

答案 8 :(得分:0)

对我来说,没有任何建议可以给我带来语法错误,因此我只是尝试使用phpmyadmin(版本4.9.2),(10.4.10-MariaDB),并在id列中添加了自动增加主键。从第一个元素开始很好地添加了Id列。

查询输出为:

ALTER TABLE table_name添加id INT非空AUTO_INCREMENT FIRST,ADMIN PRIMARY KEY(id);

答案 9 :(得分:-2)

删除引号才能正常工作......

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