it-swarm.com.ru

Удалить первичный ключ в MySQL

У меня есть следующая схема таблицы, которая сопоставляет user_customers с разрешениями в действующей базе данных MySQL:

mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| id               | int(11) | NO   | PRI | NULL    | auto_increment |
| user_customer_id | int(11) | NO   | PRI | NULL    |                |
| permission_id    | int(11) | NO   | PRI | NULL    |                |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

Я хотел бы удалить первичные ключи для user_customer_id и license_id и сохранить первичный ключ для id.

Когда я запускаю команду:

alter table user_customer_permission drop primary key;

Я получаю следующую ошибку:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

Как я могу отбросить первичный ключ столбца?

162
markb

Без индекса обслуживание столбца автоинкремента становится слишком дорогим, поэтому MySQL требует, чтобы столбец автоинкремента был самой левой частью индекса.

Вы должны удалить свойство autoincrement перед удалением ключа:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;

Обратите внимание, что у вас есть составной PRIMARY KEY, который охватывает все три столбца, и id не гарантированно будет уникальным.

Если он уникален, вы можете сделать его снова PRIMARY KEY и AUTO_INCREMENT:

ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
260
Quassnoi

Одна линия:

ALTER TABLE  `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY (  `id` )

Вы также не потеряете автоинкремент и должны будете добавить его заново, что может иметь побочные эффекты.

114
mluebke

Я считаю, что Кассной ответил на ваш прямой вопрос. Просто примечание: возможно, это просто неуклюжая формулировка с вашей стороны, но у вас, кажется, сложилось впечатление, что у вас есть три первичных ключа, по одному на каждое поле. Это не вариант. По определению у вас может быть только один первичный ключ. Здесь у вас есть первичный ключ, который состоит из трех полей. Таким образом, вы не можете "сбросить первичный ключ на столбце". Вы можете удалить первичный ключ или не отбрасывать первичный ключ. Если вам нужен первичный ключ, включающий только один столбец, вы можете удалить существующий первичный ключ на 3 столбца и создать новый первичный ключ на 1 столбец.

14
Jay
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
10
Alix Axel

Если у вас есть составной первичный ключ, сделайте так: ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

6
Visvendra Singh Rajpoot

"если вы восстановите первичный ключ, вы можете вернуть его обратно к AUTO_INCREMENT"

Не должно быть вопроса о том, желательно или нет "восстанавливать свойство PK" и "восстанавливать свойство автоинкремента" столбца ID.

Учитывая, что это было автоинкрементом в предыдущем определении таблицы, вполне вероятно, что существует какая-то программа, которая вставляется в эту таблицу без предоставления значения идентификатора (поскольку столбец идентификатора в любом случае является автоинкрементом).

Любая такая работа программы будет прервана, если не восстановить свойство autoincrement.

5
Erwin Smout

Сначала измените столбец, чтобы удалить поле auto_increment, например: alter table user_customer_permission изменить столбец id int;

Далее отбросьте первичный ключ. изменить таблицу user_customer_permission удалить первичный ключ;

3
John Gunderman

У меня была та же проблема и некоторые значения в моей таблице. Хотя я изменил свой первичный ключ с

ALTER TABLEuser_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (id)

проблема продолжилась на моем сервере. Я создал новое поле внутри таблицы. Я перенес значения в новое поле и удалил старое, проблема решена !!

1
Sam

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

0
Noob Helper

Чтобы добавить первичный ключ в столбце.

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

To удалить первичный ключ из таблицы.

ALTER TABLE table_name DROP PRIMARY KEY;
0
sumit katiyar

Сначала сделайте резервную копию базы данных. Затем отбросьте любой внешний ключ, связанный с таблицей. усечь таблицу внешнего ключа. Усечь текущую таблицу. Удалите необходимые первичные ключи. Используйте sqlyog или верстак, или heidisql, или dbeaver, или phpmyadmin.

0
Noby Nirmal