テーブルから制約を削除したい。私のクエリは:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
しかし、エラーが発生しました:
#1064
-SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、FK_tbl_magazine_issue_mst_users
1行目で「制約」の近くで使用する正しい構文を確認してください
テーブルから制約を削除したい。私のクエリは:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
しかし、エラーが発生しました:
#1064
-SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、FK_tbl_magazine_issue_mst_users
1行目で「制約」の近くで使用する正しい構文を確認してください
回答:
Mysqlには、外部キー制約を削除するための特別な構文があります。
ALTER TABLE tbl_magazine_issue
DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
alter table .. drop constraint
。MySQLは奇妙なもののようです。
私は同じ問題を抱えていて、このコードで解決する必要がありました:
ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
ALTER TABLE table_name DROP FOREIGN KEY IF EXISTS id_name_fk, DROP INDEX IF EXISTS id_name_fk;
一部の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クエリとその適切な名前を実行して、外部キーを削除します。
MariaDBを使用してここに来る人のために:
MariaDBでは、チェック制約の削除など、DROP CONSTRAINTステートメントを一般的に許可していることに注意してください。
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
CONSTRAINT CHECK(a > b)
。外部キー制約の場合、DROP FOREIGN KEY
少なくともMariaDBバージョン10.2
制約を削除する最も簡単な方法はALTER TABLE tbl_name DROP CONSTRAINT symbol;
、MySQL 8.0.19で導入された構文を使用することです。
MySQL 8.0.19以降、ALTER TABLEは、任意のタイプの既存の制約を削除および変更するためのより一般的な(およびSQL標準)構文を許可します。制約タイプは制約名から決定されます。
ALTER TABLE tbl_magazine_issue DROP CONSTRAINT FK_tbl_magazine_issue_mst_users;
これはMySQLで動作し、制約を削除します
alter table tablename drop primary key;
alter table tablename drop foreign key;
DROP PRIMARY KEY
動作しないはずです。DROP FOREIGN KEY
動作しますが、誰にを指定する必要がありますdrop
。例ALTER TABLE tablename DROP FOREIGN KEY id_name_fk
CHECK
制約を作成した場合、実際の制約は作成されないため、削除する必要はありません。から選択しinformation_schema.table_constraints
て検証することができadd constraint
、エラーなしで何度も繰り返し実行することもできます。MySQLはCHECK
制約をサポートしていませんが、SQLを使用して(実際に制約を作成せずに)制約を作成できます。