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

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

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

Но у меня есть ошибка:

#1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'constraint FK_tbl_magazine_issue_mst_users' в строке 1

Ответ 1

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

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

ALTER TABLE `table_name` DROP KEY `uc_name`;

или

ALTER TABLE `table_name` DROP INDEX `uc_name`;

Ответ 6

Некоторые 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>';

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Обратите внимание, что MariaDB позволяет операторам DROP CONSTRAINT в целом, например, для отмены контрольных ограничений:

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

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

Ответ 10

это будет работать на MySQL для ограничения ограничений

alter table tablename drop primary key;

alter table tablename drop foreign key;