Я хочу удалить ограничения из моей таблицы. Мой запрос:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
Но я получил ошибку:
#1064
- у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с «ограничениеFK_tbl_magazine_issue_mst_users
» в строке 1
mysql
foreign-keys
constraints
alter
Дипу Санкар
источник
источник
CHECK
ограничение, нет необходимости удалять его, потому что фактическое ограничение не создается. Вы можете выбратьinformation_schema.table_constraints
для проверки, и вы можете запускатьadd constraint
снова и снова без каких-либо ошибок. MySQL не поддерживаетCHECK
ограничения, но позволяет SQL создавать их (без фактического создания ограничений).Ответы:
Mysql имеет специальный синтаксис для удаления ограничений внешнего ключа:
источник
alter table .. drop constraint
. Похоже, что MySQL - нечетный выход.У меня была та же проблема, и я должен решить с помощью этого кода:
источник
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
Там нет такого понятия, как
DROP CONSTRAINT
в MySQL. В вашем случае вы могли бы использоватьDROP FOREIGN KEY
вместо этого.источник
Если ограничение не является внешним ключом, например. один добавляется с помощью «UNIQUE CONSTRAINT (colA, colB)», тогда это индекс, который можно удалить с помощью
ALTER TABLE ... DROP INDEX ...
источник
Также замечательно, что вы можете временно отключить все проверки внешнего ключа в базе данных mysql:
SET FOREIGN_KEY_CHECKS=0;
и снова включить:SET FOREIGN_KEY_CHECKS=1;
источник
Немного добавить к ответу Роберта Найта, поскольку в заголовке поста не упоминаются внешние ключи (и поскольку он не имеет полных примеров кода, а блоки кода комментариев SO не отображаются, а также код ответов). блоки), я добавлю это для уникальных ограничений. Любая из этих работ, чтобы снять ограничение:
или
источник
Некоторые ORM или структуры используют другое соглашение об именах для внешних ключей, чем по умолчанию
FK_[parent table]_[referenced table]_[referencing field]
, потому что они могут быть изменены.Laravel, например, использует в
[parent table]_[referencing field]_foreign
качестве соглашения об именах. Вы можете показать имена внешних ключей с помощью этого запроса, как показано здесь :Затем удалите внешний ключ, выполнив вышеупомянутый запрос DROP FOREIGN KEY и его собственное имя.
источник
Для тех, кто приходит сюда, используя MariaDB:
Обратите внимание, что MariaDB в целом допускает операторы DROP CONSTRAINT, например, для удаления проверочных ограничений:
https://mariadb.com/kb/en/library/alter-table/
источник
CONSTRAINT CHECK(a > b)
. Для ограничений внешнего ключа, похоже, вам все еще нуженDROP FOREIGN KEY
синтаксис, по крайней мере, в MariaDB версии 10.2источник
Там нет
DROP CONSTRAINT
В MySql. Эта работа, как магия в MySQL 5.7источник
Самый простой способ снять ограничение - использовать синтаксис,
ALTER TABLE tbl_name DROP CONSTRAINT symbol;
представленный в MySQL 8.0.19 :db <> Fiddle demo
источник
это будет работать на MySQL, чтобы снять ограничения
источник
DROP PRIMARY KEY
не должно работать.DROP FOREIGN KEY
работает, но вам нужно указать, комуdrop
. НапримерALTER TABLE tablename DROP FOREIGN KEY id_name_fk