Змініть стовпчик 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
@Steven Oxley, тому що я так оголосив свій стіл.
C. Росс

30
Визначення числа в дужках не робить абсолютно нічого (ну добре, майже нічого) для цілих типів MySQL. Єдине, на що може вплинути число, - це ширина дисплея, і клієнт повинен це зробити. Але не обманюйте і думайте, що це працює так, як це робиться для типів VARCHAR і DECIMAL - у цих випадках обсяг даних, який ви можете зберігати там, фактично визначений, тоді як конкретний аромат INT завжди дозволяє зберігати точне той же діапазон значень
Roland Bouman

Я завжди отримую помилку первинного ключа під час виконання цих операцій, тому у мене це є те, що я роблю: SET FOREIGN_KEY_CHECKS = 0; ПЕРЕГЛЯД ТАБЛИЧНОГО ДОКУМЕНТА Первинний ключ ALTER TABLE document MODIFY COLUMN document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Фернандо

Схоже, це не працює в MySQL, тому що вам потрібно встановити стовпчик як основний ключ, оскільки лише одному стовпцю дозволено автоматичне збільшення (також дивіться відповідь Роланда
Бумана

74

Роман має рацію, але зауважте, що стовпець з автоматичним збільшенням повинен бути частиною ОСНОВНОГО КЛЮЧА або УНІКАЛЬНОГО КЛЮЧА (і майже в 100% випадків це повинен бути єдиний стовпець, який складає ПЕРШИЙ КЛЮЧ):

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/uk/alter-table.html для модифікації синтаксису стовпців та http://dev.mysql.com/doc /refman/5.1/uk/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

Ви можете використовувати наступний запит для автоматичного збільшення документа_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 та модифікуємо ключові слова. Припустимо, ми створили таблицю типу:

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

Встановлення стовпця як первинного ключа та автоматичного збільшення одночасно:

  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.