it-swarm.com.ru

Как удалить ограничения из моей таблицы 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

211
deepu sankar

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

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
377
Bohemian

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

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
43
Wellington Lorindo

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

24
Lothar

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

11
Robert Knight

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

ALTER TABLE `table_name` DROP KEY `uc_name`;

или же

ALTER TABLE `table_name` DROP INDEX `uc_name`;
4
jbobbins

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

3
roelleor

Некоторые 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 и его собственное имя. 

2
piscator

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

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

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

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

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