Подтвердить что ты не робот

Mysql, alter column удалить первичный ключ и автоматическое приращение

Я меняю таблицу mysql db с id (auto) на uid.

ALTER TABLE companies DROP PRIMARY KEY;
ALTER TABLE companies ADD PRIMARY KEY (`uuid`);

Это ошибка, которую я получаю.

[SQL] ALTER TABLE companies DROP PRIMARY KEY;
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

Что я понимаю, мне нужно изменить id на не-автоинкремент, потому что я бросаю его как первичный ключ.? Каков синтаксис для изменения столбца для удаления первичного ключа и автоматического увеличения?

ALTER TABLE companies change id id ?????????? int(11)
4b9b3361

Ответ 1

Если вам нужно удалить автоинкремент и первичный ключ из столбца id в одном выражении SQL, это должно сделать:

ALTER TABLE companies DROP PRIMARY KEY, CHANGE id id int(11);

Фактически, вы должны иметь возможность делать все в одном запросе ALTER TABLE:

ALTER TABLE companies
DROP PRIMARY KEY,
CHANGE id id int(11),
ADD PRIMARY KEY (uuid);

Ответ 2

Если вы не меняете имя столбца, вы можете использовать MODIFY:

ALTER TABLE `companies` MODIFY `id` int(11), 
                           DROP PRIMARY KEY, 
                   ADD PRIMARY KEY (`uuid`);

Выполняя все это в одном выражении alter, он также рассматривается как атомарный, поэтому нет никаких шансов на несоответствие между запросами (в отличие от выполнения нескольких операторов в строке).

Ответ 3

Запрос на удаление автоматического приращения:

alter table companies DROP PRIMARY KEY,
change id id int(11) NOT NULL

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

Если вы хотите добавить первичный ключ в другой столбец, используйте этот запрос

alter table companies add PRIMARY KEY(uuid)

Если вы хотите отменить автоматическое увеличение, первичный ключ и добавить первичный ключ в новый столбец в том же запросе, используйте этот запрос

alter table comapnies DROP PRIMARY KEY,
   change id id int(11) NOT NULL,
   add PRIMARY KEY(uuid)