1

我有桌子,我试图添加

`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

所以问题是:

  1. 我怎样才能找到哪一个是关键列
  2. 我可以毫无问题地更改它并添加新的 ID 字段(使用自动增量)吗?
4

5 回答 5

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
于 2011-03-15T22:31:25.880 回答
0
`id` int(11) NOT NULL auto_increment primary key,

它必须作为主键

于 2011-03-15T22:10:25.327 回答
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`) ;

您只需按照 matthewh 的建议运行 show create table 即可找到当前主键,并在输出中查找类似内容:

主键 ( old_column_name),

如果可以使用,您还应该查看 MySQL Workbench。它使进行这样的更改变得非常容易。

于 2011-03-15T22:11:30.973 回答
0

没有人使用无符号整数作为主键。当您甚至不使用 zerofill 时,为什么还要使用可选的显示宽度,即 int(11) !

drop table if exists foo;
create table foo
(
 id int unsigned not null auto_increment primary key,
 ...
)
engine=innodb;
于 2011-03-15T22:34:34.313 回答
0

首先备份数据库。然后删除与表关联的任何外键。截断外键表。截断当前表。使用自动增量添加 id。使用 sqlyog 或 workbench 或 heidisql 或 dbeaver 或 phpmyadmin。然后使用批量更新从备份中插入表。

于 2016-08-14T20:59:21.680 回答