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