2010-06-22 3 views
17

Я меняю таблицу mysql db с id (auto) на uid.mysql, alter column удалить первичный ключ и автоинкремент

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 

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

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

ответ

24

Если вам нужно удалить автоинкрементируемый и первичный ключ из 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); 
+0

Если я сделаю это как 3 оператора, он будет работать. ALTER TABLE меняет идентификатор id int (11); ALTER TABLE компании DROP PRIMARY KEY; Компания ALTER TABLE ДОБАВЛЯЕТ ПЕРВИЧНЫЙ КЛЮЧ (uuid); – Brett

+1

В моей ситуации я хочу только отказаться от автоматического увеличения. Я пробовал это: 'ALTER TABLE myTable CHANGE _id _id INT (12)', но он говорит «синтаксическая ошибка около CHANGE». Что я здесь делаю неправильно? –

2

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

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) 
4

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

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

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

Смежные вопросы