Таблица ALTER - добавление AUTOINCREMENT в MySQL - PullRequest
65 голосов
/ 05 августа 2011

Я создал таблицу в MySQL со столбцом itemID.После создания таблицы теперь я хочу изменить этот столбец на AUTOINCREMENT.Как это можно сделать с помощью операторов ALTER?

Определение таблицы:

ALLITEMS (itemid int(10) unsigned, itemname varchar(50))

Я использую следующий код, но он выдает ошибка: синтаксис неправильный .

ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 

Ответы [ 7 ]

91 голосов
/ 05 августа 2011
CREATE TABLE ALLITEMS(
    itemid INT(10)UNSIGNED,
    itemname VARCHAR(50)
);

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;

DESC ALLITEMS;

INSERT INTO ALLITEMS(itemname)
VALUES
    ('Apple'),
    ('Orange'),
    ('Banana');

SELECT
    *
FROM
    ALLITEMS;

Я тоже перепутал с ключевыми словами CHANGE и MODIFY:

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;

ALTER TABLE ALLITEMS MODIFY itemid INT(5);

Пока мы там, обратите внимание, что AUTO_INCREMENT также может начинаться с предопределенного числа:

ALTER TABLE tbl AUTO_INCREMENT = 100;
15 голосов
/ 05 августа 2011

Синтаксис:

   ALTER TABLE `table1` CHANGE `itemId` `itemId` INT( 11 ) NOT NULL AUTO_INCREMENT 

Но для таблицы требуется определенный ключ (без первичного ключа для itemId).

12 голосов
/ 05 августа 2011
ALTER TABLE `ALLITEMS`
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
6 голосов
/ 31 июля 2016

Основной синтаксис для добавления ключа AUTO_INCREMENT PRIMARY в существующую таблицу OP:

ALTER TABLE allitems
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY;

Или для новой таблицы, вот пример синтаксиса из the docs :

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
);

Ловушки и вещи для заметки:

  • Столбец AUTO_INCREMENT должен иметь индекс.(Обычно вы хотите, чтобы это был ПЕРВИЧНЫЙ КЛЮЧ, но MySQL этого не требует.)
  • Обычно хорошей идеей будет сделать ваши AUTO_INCREMENT колонки UNSIGNED.Из документов:

    Используйте атрибут UNSIGNED, если это возможно, чтобы увеличить диапазон.

  • При использовании предложения CHANGE или MODIFY для создания столбца AUTO_INCREMENT (или даже всякий раз, когда используется CHANGE или MODIFYпредложение) вы должны быть осторожны, чтобы включить в столбец все модификаторы, например NOT NULL или UNSIGNED, которые отображаются в определении таблицы при вызове SHOW CREATE TABLE yourtable.В противном случае эти модификаторы будут потеряны.
2 голосов
/ 05 августа 2011
ALTER TABLE allitems
CHANGE itemid itemid INT(10) AUTO_INCREMENT;
1 голос
/ 08 июля 2015
ALTER TABLE tblcatalog
    CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST;
0 голосов
/ 10 октября 2015
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY;
...