这是我尝试但它失败了:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
有人有小费吗?
The*_*ter 206
添加列后,您始终可以添加主键:
ALTER TABLE goods ADD PRIMARY KEY(id)
至于你的脚本无法正常工作的原因,你需要指定的PRIMARY KEY
不仅仅是单词PRIMARY
:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
小智 12
如果您的表格更好,请不要使用以下语句:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
因为它会复制临时表中的所有数据,alter table然后将其复制回来.最好手动完成.重命名你的桌子:
rename table goods to goods_old;
Run Code Online (Sandbox Code Playgroud)
使用主键和所有必需的索引创建新表:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
Run Code Online (Sandbox Code Playgroud)
将旧表中的所有数据移动到新的禁用键和索引中以加速复制:
- 将其用于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;
Run Code Online (Sandbox Code Playgroud)
- 使用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;
Run Code Online (Sandbox Code Playgroud)
将PK添加到具有约200万行的表中需要2 000秒.
MER*_*MER 12
如果要将主键约束添加到现有列,则所有先前列出的语法都将失败.
要将主键约束添加到现有列,请使用以下格式:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
不确定这对其他人是否重要,但我更喜欢将表的 id 作为数据库中的第一列。其语法是:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
Run Code Online (Sandbox Code Playgroud)
与第一个答案相比,这只是一个小小的改进。如果你想让它处于不同的位置,那么
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
Run Code Online (Sandbox Code Playgroud)
HTH,-ft
小智 7
使用此查询,
alter table `table_name` add primary key(`column_name`);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
214769 次 |
最近记录: |