我有桌子,我试图添加
`id` int(11) NOT NULL auto_increment,
到桌子,但我得到了
ERROR 1075: Incorrect table definition; There can only be one auto column and it must be defined as a key
所以问题是:
答案 0 :(得分:3)
如果表已经创建,请使用ALTER:
ALTER TABLE `table` ADD COLUMN `id` INT(11) NOT NULL AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`)
如果正在创建表,则必须将auto_increment设置为主键:
CREATE TABLE IF NOT EXISTS `database`.`table` (
`id`INT(11) NOT NULL AUTO_INCREMENT ,
`a` VARCHAR(45) NULL ,
`b` VARCHAR(255) NULL ,
`c` VARCHAR(45) NULL ,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci
答案 1 :(得分:0)
`id` int(11) NOT NULL auto_increment primary key,
必须将其作为主键
答案 2 :(得分:0)
ALTER TABLE `database`.`table_name` ADD COLUMN `new_column_name` INT NOT NULL AUTO_INCREMENT AFTER `last_column_name_in_the_table` , CHANGE COLUMN `old_column_name` `old_column_name` INT(11) NOT NULL
, DROP PRIMARY KEY
, ADD PRIMARY KEY (`new_column_name`) ;
只需将show create table作为matthewh建议运行,就可以找到当前的主键,并在输出中查找类似的内容:
PRIMARY KEY(old_column_name
),
如果可以使用它,你应该查看MySQL Workbench。它使这样的改变变得非常简单。
答案 3 :(得分:0)
没有人使用无符号整数作为主键。当你甚至不使用zerofill时,为什么还要使用可选的显示宽度,即int(11)!
drop table if exists foo;
create table foo
(
id int unsigned not null auto_increment primary key,
...
)
engine=innodb;
答案 4 :(得分:0)
首先备份数据库。然后删除与表关联的任何外键。截断外键表。触发当前表。使用自动增量添加id。使用sqlyog或workbench或heidisql或dbeaver或phpmyadmin。然后使用批量更新从备份中插入表。