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

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

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

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

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

 劉鎮瑲19 дек. 2018 г., 02:16
Возможный дубликатУдалить первичный ключ в MySQL
 ADTC24 апр. 2016 г., 15:41
Стоит отметить, что если вы создалиCHECK ограничение, нет необходимости удалять его, потому что фактическое ограничение не создается. Вы можете выбрать изinformation_schema.table_constraints проверить, и вы даже можете запуститьadd constraint снова и снова без каких-либо ошибок. MySQL не поддерживаетCHECK ограничения, но позволяет SQL, предназначенный для их создания (без фактического создания ограничений).

Ответы на вопрос(10)

DROP CONSTRAINT в MySQL. В вашем случае вы могли бы использоватьDROP FOREIGN KEY вместо.

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

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

ALTER TABLE `table_name` DROP KEY `uc_name`;

или же

ALTER TABLE `table_name` DROP INDEX `uc_name`;
Решение Вопроса

юча:

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
 Rich Harding21 нояб. 2017 г., 22:33
Решение Веллингтона Лориндо можно рассматривать как более правильное, потому что простое удаление внешнего ключа не удалит связанный индекс. Конечно, индекс, возможно, был создан отдельно, но если он был создан в результате добавления внешнего ключа, то он не будет удален простым удалением внешнего ключа.
 Lealo18 авг. 2017 г., 02:35
Хорошо, я понял, что чужое - это отдельная вещь, просто соединяющая столбец с другими столбцами таблиц. У меня было стандартное имя, данное ему. Также теперь я теперь, что вы можете безопасно удалять внешние ключи без удаления самого столбца.
 Lealo18 авг. 2017 г., 02:26
Он говорит, что не может отбрасывать "column2", потому что он необходим в ограничении внешнего ключа. Когда я делаю, как вы говорите, я получаю «Cant DROP column2; проверьте, что столбец / ключ существует»
 Jared Beck24 мар. 2015 г., 00:48
Postgres, MSSQL и Oracle имеютalter table .. drop constraint, Похоже, что MySQL - нечетный выход.

чтобы снять ограничения

alter table tablename drop primary key;

alter table tablename drop foreign key;
 RousseauAlexandre23 окт. 2017 г., 14:29
DROP PRIMARY KEY не должно работать.DROP FOREIGN KEY работает, но вам нужно указать, чейdrop, НапримерALTER TABLE tablename DROP FOREIGN KEY id_name_fk
Перейти к структурному виду таблицы
Вы увидите 2 варианта вверху. Структура таблицы b.Взгляд отношения.
Теперь нажмите наВзгляд отношения здесь вы можете удалить ограничение внешнего ключа. Вы получите все отношения здесь.
 Silviu St04 сент. 2016 г., 20:27
Это здорово, сработало для меня, когда вы не знаете идентификатор

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
 Frank Forte20 дек. 2018 г., 19:56
Как одна команда:ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
 Rich Harding21 нояб. 2017 г., 22:32
Это можно рассматривать как более правильное, чем принятое решение, поскольку простое удаление внешнего ключа не приведет к удалению индекса. Конечно, индекс, возможно, был создан отдельно, но если он был создан в результате добавления внешнего ключа, то он не будет удален простым удалением внешнего ключа.

внешних ключей, чем по умолчанию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 и его собственное имя.

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

ALTER TABLE table_name
DROP CONSTRAINT constraint_name;

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

 Frank Forte20 дек. 2018 г., 19:58
Да, это для ограничений, которые находятся в одной таблице, напримерCONSTRAINT CHECK(a > b), Для ограничений внешнего ключа, кажется, вам все еще нужноDROP FOREIGN KEY синтаксис, по крайней мере, в MariaDB версии 10.2

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

Ваш ответ на вопрос