Измените столбец MySQL на AUTO_INCREMENT. - PullRequest
180 голосов
/ 30 января 2010

Я пытаюсь изменить таблицу, чтобы ее столбец первичного ключа AUTO_INCREMENT после факта. Я пробовал следующий SQL, но получил уведомление об ошибке синтаксиса.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

Я что-то не так делаю или это невозможно?

+--------------------+
| VERSION()          |
+--------------------+
| 5.0.75-0ubuntu10.2 |
+--------------------+

Ответы [ 19 ]

340 голосов
/ 30 января 2010
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
68 голосов
/ 30 января 2010

Роман прав, но обратите внимание, что столбец auto_increment должен быть частью PRIMARY KEY или UNIQUE KEY (и почти в 100% случаев это должен быть единственный столбец, составляющий PRIMARY KEY):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
9 голосов
/ 11 августа 2015

В моем случае это сработало только когда я поставил not null. Я думаю, что это ограничение.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
6 голосов
/ 30 января 2010

SQL для этого будет:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

Есть несколько причин, по которым ваш SQL может не работать. Во-первых, вы должны заново указать тип данных (INT в этом случае). Кроме того, столбец, который вы пытаетесь изменить, должен быть проиндексирован (он не обязательно должен быть первичным ключом, но обычно это именно то, что вам нужно). Кроме того, для каждой таблицы может быть только один столбец AUTO_INCREMENT. Итак, вы можете запустить следующий SQL (если ваш столбец не проиндексирован):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

Дополнительную информацию можно найти в документации MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html для синтаксиса изменения столбца и http://dev.mysql.com/doc/refman/5.1/en/create-table.html для получения дополнительной информации об указании столбцов.

5 голосов
/ 30 января 2010

AUTO_INCREMENT является частью типа данных столбца, вы должны снова определить полный тип данных для столбца:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

(int, взятый в качестве примера, вы должны установить для него тип, который был у столбца ранее)

5 голосов
/ 30 января 2010

Вы должны указать тип столбца перед директивой auto_increment, т.е. ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.

2 голосов
/ 22 апреля 2018

Вы можете использовать следующий запрос, чтобы document_id автоматически увеличивал

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

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

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
2 голосов
/ 05 июля 2015

Ниже работает заявление. Обратите внимание, что вам нужно снова упомянуть тип данных для имени столбца (повторно объявите тип данных, в котором столбец был раньше).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
2 голосов
/ 20 декабря 2014

Если ничего из вышеперечисленного не работает, попробуйте это. Это то, что я сделал в MYSQL, и да, вам нужно написать имя столбца (document_id) дважды.

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
2 голосов
/ 07 декабря 2014

AUTO_INCREMENT является частью типа данных столбца, вы должны снова определить полный тип данных для столбца:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int, взятый в качестве примера, вы должны установить его в тип столбца ранее)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...