Удалить основной ключ в 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

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

Ответ 1

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

Перед удалением ключа следует удалить свойство автоинкремента:

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;

Ответ 2

Одна строка:

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

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

Ответ 3

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

Ответ 4

ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;

Ответ 5

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

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

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

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

Ответ 6

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

Ответ 7

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

Затем отбросьте первичный ключ. alter table user_customer_permission drop первичный ключ;

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

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

ALTER TABLE table_name DROP PRIMARY KEY;