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

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

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

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

+ -------------------- +
| ВЕРСИЯ ()          |
+--------------------+
| 5.0.75-0ubuntu10.2 |
+--------------------+

21 ответ

Решение
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

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

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY

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

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

Вы можете применить ограничение atuto_increment к столбцу данных с помощью следующего запроса:

ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;

Но если столбцы являются частью ограничения внешнего ключа, вы, скорее всего, получите сообщение об ошибке. Поэтому рекомендуется отключить foreign_key_checks, используя следующий запрос:

SET foreign_key_checks = 0;

Поэтому вместо этого используйте следующий запрос:

SET foreign_key_checks = 0;
ALTER TABLE customers MODIFY COLUMN customer_id BIGINT NOT NULL AUTO_INCREMENT;
SET foreign_key_checks = 1;

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

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

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

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

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

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

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;

Вы можете использовать следующий запрос, чтобы 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;

Установка столбца в качестве первичного ключа и 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>

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

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

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

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

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;

Именно так:

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

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

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

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

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;

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

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

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

alter table emp modify column id int(10) auto_increment;

Try the following:

ALTER TABLE table_name MODIFY COLUMN id datatype auto_increment;

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

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

С SQL к вопросу прикреплен тег. Я действительно думаю, что во всех ответах упущен один важный момент.

MODIFYкоманда не существует на сервере SQL, поэтому вы получите сообщение об ошибке при запуске

ALTER TABLE Satellites MODIFY COLUMN SatelliteID INT auto_increment PRIMARY KEY;

В этом случае вы можете добавить новый столбец как INT IDENTITY

      ALTER TABLE Satellites
   ADD ID INT IDENTITY
       CONSTRAINT PK_YourTable PRIMARY KEY CLUSTERED;

ИЛИ


Заполните существующий нулевой индекс инкрементными числами, используя этот метод,
      DECLARE @id INT
SET @id = 0 
UPDATE Satellites SET @id = SatelliteID = @id + 1 

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

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Другие вопросы по тегам