Идентификатор автоинкремента и ключевая проблема (MySQL) - PullRequest
1 голос
/ 16 марта 2011

У меня есть таблица, и я пытался добавить

`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. Можно ли без проблем изменить его и добавить новое поле идентификатора (с автоинкрементом)?

Ответы [ 5 ]

3 голосов
/ 16 марта 2011

Если таблица уже создана, используйте 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
0 голосов
/ 14 августа 2016

Первое резервное копирование базы данных. Затем отбросьте любой внешний ключ, связанный с таблицей. усечение таблицы внешнего ключа. Усечение текущей таблицы. Добавьте идентификатор с автоматическим приращением. Используйте sqlyog или верстак или heidisql или dbeaver или phpmyadmin. Затем вставьте таблицу из резервной копии с помощью пакетного обновления.

0 голосов
/ 16 марта 2011

Никто не использует целые числа без знака для первичных ключей.И зачем использовать дополнительную ширину экрана, например, int (11), когда вы даже не используете zerofill !!

drop table if exists foo;
create table foo
(
 id int unsigned not null auto_increment primary key,
 ...
)
engine=innodb;
0 голосов
/ 16 марта 2011
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, и найдите что-то подобное в выводе:

ПЕРВИЧНЫЙ КЛЮЧ (old_column_name),

Также вы должны проверить MySQL Workbench, если вы можете использовать его. Это делает такие изменения действительно легкими.

0 голосов
/ 16 марта 2011
`id` int(11) NOT NULL auto_increment primary key,

Должен быть сделан первичный ключ

...