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

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

 ALTER TABLE document ALTER COLUMN document_id AUTO_INCREMENT 

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

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

 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; 

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

 ALTER TABLE document ALTER COLUMN document_id int AUTO_INCREMENT 

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

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 MODIFY COLUMN document_id int AUTO_INCREMENT 

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

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

 ALTER TABLE document MODIFY COLUMN document_id int AUTO_INCREMENT; 

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

 ALTER TABLE document CHANGE COLUMN document_id document_id INT(11) NOT NULL 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; 

Синтаксис предыдущего стола:

 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; 

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

Именно так:

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

Вы можете сделать это следующим образом:

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

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

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

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

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

 ALTER TABLE YourTable DROP COLUMN IDCol ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1) 
  • SQL-запрос возвращает данные из нескольких таблиц
  • Есть ли какая-либо функция в oracle, аналогичная group_concat в mysql?
  • Выполнение SQL-запросов в таблице Excel в рабочей книге с помощью макроса VBA
  • Код ошибки: 2013. Потерянное соединение с сервером MySQL во время запроса
  • Найти все таблицы, содержащие столбец с указанным именем - MS SQL Server
  • Каковы варианты использования CHAR над VARCHAR в SQL?
  • Список «Поле» iCalendar (для схемы базы данных на основе стандарта iCalendar)
  • Как использовать параметры в VBA в разных контекстах Microsoft Access?
  • Ошибка удаления базы данных (не может rmdir '.test \', errno: 17)
  • SQL Выбор между датами
  • Синтаксис выражения SQL-выражения?
  • Interesting Posts

    Как предотвратить свертывание строк SQL Injection

    Что не так с использованием Thread.Abort ()

    Нужно использовать мостовой адаптер только в Vagrant, нет NAT

    Каковы правила совпадения запросов медиа-запросов CSS?

    Как установить представление списка в качестве представления по умолчанию FTP в проводнике Windows?

    Django получает доступ к полям ManyToMany из сигнала post_save

    Отображение разницы между двумя значениями datetime в часах

    Как конвертировать HTML-теги в RTF или любой текст в формате форматирования из командной строки Linux

    Строка :: c_str () больше не завершена нулями в C ++ 11?

    Разница между HashMap и ArrayList в Java?

    Skype – невозможно получать сообщения группового чата

    EICAR, как антивирус для Windows 64 бит

    Как открыть блокнот в качестве администратора только с помощью окна Win + R?

    Невозможно установить заголовок в JSP. Ответ уже сделан

    Как использовать изображение как точку в ggplot?

    Давайте будем гением компьютера.