Измените столбец 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.


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


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;

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;

1

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

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

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

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;



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>


-3

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

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.