我尝试了以下方法,但它失败了:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
有人有提示吗?
我尝试了以下方法,但它失败了:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
有人有提示吗?
添加完列之后,您始终可以添加主键:
ALTER TABLE goods ADD PRIMARY KEY(id)
至于为什么您的脚本无法工作,是因为您需要指定 PRIMARY KEY
,而不仅仅是单词 PRIMARY
:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
AUTO_INCREMENT
之后放置FIRST
,这意味着id
将成为已存在表格的第一列。否则,它将按照现在的写法放置在表格末尾,当进行简单的SELECT * ...
操作时可能会有些混乱。 - StefanK(10)
。并且在末尾添加FIRST
,这样主键就是表中的第一列。 - rjh如果您想要在现有列上添加主键约束,之前列出的所有语法都将失败。
要在现有列上添加主键约束,请使用以下形式:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
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;
在大约2亿行的表中添加PK需要2000秒。
我不确定这对其他人是否有影响,但我更喜欢将表格的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 `table_name` add primary key(`column_name`);
ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
id
列。从第一个元素开始,id
列被成功添加。table_name
ADD id
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id
);ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;
DROP PRIMARY KEY
并在ADD PRIMARY KEY
部分重新提及旧的键和新的键。请看以下示例。my_test_table
为例,之前该表只有一个名为old_key
的主键列,然后我们新增了一个名为new_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
);
试试这个,
alter table goods add column `id` int(10) unsigned primary key auto_increment