У меня есть следующая схема таблицы, которая сопоставляет 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
Как я могу удалить первичный ключ столбца?
Без индекса сохранение столбца автоинкремента становится слишком дорогостоящим, поэтому 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;
Одна строка:
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` )
Вы также не потеряете автоинкремент и должны повторно добавить его, что может иметь побочные эффекты.
Я считаю, что Квасной ответил на ваш прямой вопрос. Просто примечание: возможно, это только какая-то неудобная формулировка с вашей стороны, но у вас, похоже, создается впечатление, что у вас есть три первичных ключа, по одному на каждом поле. Это не тот случай. По определению у вас может быть только один первичный ключ. Здесь у вас есть первичный ключ, который состоит из трех полей. Таким образом, вы не можете "удалить первичный ключ в столбце". Вы можете удалить первичный ключ или не перенести первичный ключ. Если вы хотите, чтобы первичный ключ содержал только один столбец, вы можете удалить существующий первичный ключ на 3 столбца и создать новый первичный ключ в 1 столбце.
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
Если у вас есть составной первичный ключ, сделайте так: ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
", если вы восстановите первичный ключ, вы можете вернуть его обратно в AUTO_INCREMENT"
Не должно быть вопроса о том, желательно ли "восстановить свойство PK" и "восстановить свойство автоинкремента" столбца идентификатора.
Учитывая, что это было автоинкремент в предыдущем определении таблицы, вполне вероятно, что существует какая-то программа, которая вставляет в эту таблицу без предоставления значения ID (потому что столбец идентификатора также является автоинкрементацией).
Любая такая операция программы прерывается, не восстанавливая свойство автоинкремента.
Сначала измените столбец, чтобы удалить поле auto_increment следующим образом: alter table user_customer_permission изменить идентификатор столбца int;
Затем отбросьте первичный ключ. alter table user_customer_permission drop первичный ключ;
У меня была такая же проблема и некоторые значения внутри моей таблицы. Хотя я изменил свой основной ключ с помощью
ALTER TABLE
user_customer_permission DROP PRIMARY KEY , ADD PRIMARY KEY (
id )
проблема продолжалась на моем сервере. Я создал новое поле внутри таблицы. Я передал значения в новое поле и удалил старый, проблема решена!
Чтобы добавить первичный ключ в столбец.
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Чтобы удалить первичный ключ из таблицы.
ALTER TABLE table_name DROP PRIMARY KEY;
Найдите таблицу в менеджере SQL, щелкните ее правой кнопкой мыши и выберите дизайн, затем щелкните правой кнопкой мыши значок маленького ключа и выберите удалить первичный ключ.
Сначала создайте резервную копию базы данных. Затем удалите любой внешний ключ, связанный с таблицей. обрезать таблицу внешнего ключа. Утвить текущую таблицу. Удалите необходимые первичные ключи. Используйте sqlyog или workbench или heidisql или dbeaver или phpmyadmin.
@markb
: если вы восстановите первичный ключ, вы можете вернуть его обратно кAUTO_INCREMENT
.