这是我尝试的但它失败了:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
有人有小费吗?
答案 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;
- 使用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;