Как удалить ограничения из моей таблицы MySQL?

Я хочу удалить ограничения из моей таблицы. Мой вопрос:

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

но я получил ошибку:

#1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса, чтобы использовать near ' constraint FK_tbl_magazine_issue_mst_users' в строке 1

10 ответов


Mysql имеет специальный синтаксис для удаления ограничений внешнего ключа:

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users

У меня была такая же проблема и я должна решить с этот код:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;

нет такой вещи, как DROP CONSTRAINT в MySQL. В вашем случае вы можете использовать DROP FOREIGN KEY вместо.


если ограничение не является внешним ключом, например. один добавлен с помощью " уникального ограничения (colA, colB)", тогда это индекс, который можно удалить с помощью ALTER TABLE ... DROP INDEX ...


чтобы добавить немного к ответу Роберта Найта, поскольку в названии самого поста не упоминаются внешние ключи (и поскольку у него нет полных образцов кода, и поскольку блоки кода комментариев SO не отображаются, а также блоки кода ответов), я добавлю это для уникальный ограничения. Любой из них работает, чтобы отбросить ограничение:

ALTER TABLE `table_name` DROP KEY `uc_name`;

или

ALTER TABLE `table_name` DROP INDEX `uc_name`;

также приятно, вы можете временно отключить все проверки внешнего ключа из базы данных mysql: SET FOREIGN_KEY_CHECKS=0; И включить его снова: SET FOREIGN_KEY_CHECKS=1;


  1. перейти к представлению структуры таблицы
  2. вы увидите опцию 2 вверху a.Структура таблицы b.отношения вид.
  3. Теперь нажмите на кнопку отношения вид, здесь вы можете удалить ограничение внешнего ключа. Вы получите все отношения здесь.

некоторые ORM или фреймворки используют другое соглашение об именах для внешних ключей, чем по умолчанию FK_[parent table]_[referenced table]_[referencing field], потому что их можно изменить.

Laravel, например, использует [parent table]_[referencing field]_foreign как соглашение об именах. Вы можете показать имена внешних ключей с помощью этого запроса, как показано здесь:

SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_SCHEMA = '<database>' AND REFERENCED_TABLE_NAME = '<table>';

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


для тех, кто приходит сюда с помощью MariaDB:

обратите внимание, что MariaDB допускает операторы ограничения DROP вообще, например, для удаления ограничений проверки:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

https://mariadb.com/kb/en/library/alter-table/


это будет работать на MySQL, чтобы отбросить ограничения

alter table tablename drop primary key;

alter table tablename drop foreign key;