Измените столбец MySQL на AUTO_INCREMENT.

194

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

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

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

+ -------------------- +
| ВЕРСИЯ () |
+ -------------------- +
| 5.0.75-0ubuntu10.2 |
+ -------------------- +
Пересекать
источник

Ответы:

380
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
Римский
источник
3
Мне любопытно, почему вы предлагаете INT (4). Любая конкретная причина?
Стивен Оксли
3
@ Стивен Оксли, потому что я так объявил свой стол.
К. Росс
30
Указание числа в скобках ничего не делает (хорошо, почти ничего) для целочисленных типов MySQL. Единственное, что может повлиять на число, - это ширина экрана, и клиент должен это сделать. Но не обманывайтесь и думайте, что он работает так же, как и для типов VARCHAR и DECIMAL - в этих случаях фактически указывается объем данных, которые вы можете хранить там, тогда как конкретный вариант INT всегда позволяет хранить точные данные. тот же диапазон значений
Роланд Буман
Я всегда получаю ошибку первичного ключа при выполнении этой операции, поэтому я делаю вот что: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE document DROP ПЕРВИЧНЫЙ КЛЮЧ; ALTER TABLE document MODIFY COLUMN document_id INT ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Фернандо
Похоже, что это не работает в MySQL, потому что вам нужно установить столбец в качестве первичного ключа, так как auto_increment разрешено использовать только один столбец (см. Также ответ
Ролана Боумана
74

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

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
Ролан Буман
источник
10
+1. Требуется первичный ключ, если он не был определен во время создания таблицы.
1
Также это означает, что данные в этом столбце должны быть уже уникальными
Umair Malhi
10

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

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
Рабия Наз Хан
источник
7

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 для получения дополнительной информации об указании столбцов.

Стивен Оксли
источник
6

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

Håvard S
источник
1
Это должно бытьMODIFY COLUMN
shxfee
5

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

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

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

Дэн Мыло
источник
3

Вы можете сделать это так:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
Адитья Кумар
источник
Кажется, это просто повторение всех остальных ответов.
Панг
2

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

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

KKK
источник
2

Вы можете использовать следующий запрос, чтобы 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;
Азар Зафар
источник
1
Обратите внимание, что если этот столбец уже является первичным ключом, вы не можете объявить его снова там, иначе он выдаст ошибку о нескольких первичных ключах (вы ожидаете, что он будет немного более умным там, и увидите, что это тот же самый первичный ключ, который я предполагаю) , Таким образом, в этом случае вы просто пропускаете ПЕРВИЧНЫЙ КЛЮЧ, и это не влияет на существующую настройку первичного ключа в этом столбце
Джордж Бирбилис
2

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
user5082888
источник
2

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

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
Сюзи
источник
1

Чтобы изменить столбец в MySQL, мы используем ключевые слова alter и modify. Предположим, мы создали таблицу вроде:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

Теперь мы хотим изменить тип идентификатора столбца на целое с автоматическим приращением. Вы можете сделать это с помощью команды:

alter table emp modify column id int(10) auto_increment;
solarissmoke
источник
1

Синтаксис предыдущей таблицы:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

Для изменения TransactionId на автоинкремент используйте этот запрос

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
Усман Якуб
источник
1
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
Аминур Рахман
источник
1

Именно так:

alter table document modify column id int(11) auto_increment;

apemost
источник
0

Поскольку вы снова переопределяете столбец, вам нужно снова указать тип данных и добавить к нему auto_increment, поскольку он является частью типа данных.

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
оптимизатор
источник
0

Установка столбца в качестве первичного ключа и auto_increment одновременно:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>
Несими Тагизаде
источник
0

ALTER TABLE table_name MODIFY COLUMN id тип данных auto_increment;

Картик Маднани
источник
-3

Используйте следующие запросы:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Дуг Кобейн
источник