テーブルから制約を削除したいです。私の質問は:
ALTER TABLE `tbl_magazine_issue`
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`
しかし、私はエラーを得ました:
#1064
- SQL構文にエラーがあります。 1行目でnear 'FK_tbl_magazine_issue_mst_users
'を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
MySQLは外部キー制約を削除するための特別な構文を持っています。
ALTER TABLE tbl_magazine_issue
DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
私は同じ問題を抱えていて、私はこのコードで解決しなければなりませんでした:
ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
MySQLにはDROP CONSTRAINT
のようなものはありません。あなたの場合は、代わりにDROP FOREIGN KEY
を使うことができます。
制約が外部キーではない場合'UNIQUE CONSTRAINT(colA、colB)'を使用して追加されたものは、ALTER TABLE ... DROP INDEX ...
を使用して削除できるインデックスです。
また、ニース、mysqlデータベースからすべての外部キーチェックを一時的に無効にすることができます:SET FOREIGN_KEY_CHECKS=0;
そして再び有効にするには:SET FOREIGN_KEY_CHECKS=1;
Robert Knightの回答に少し追加すると、投稿のタイトル自体は外部キーに言及していないので(そして彼の完全なコードサンプルがないため、そしてSOのコメントコードブロックも回答のコードと同様に表示されないブロック)、 unique の制約に対してこれを追加します。これらのどちらでも、制約をなくすことができます。
ALTER TABLE `table_name` DROP KEY `uc_name`;
または
ALTER TABLE `table_name` DROP INDEX `uc_name`;
ORMやフレームワークの中には、デフォルトのFK_[parent table]_[referenced table]_[referencing field]
とは異なる外部キーの命名規則を使用しているものもあります。それらは変更できるからです。
例えばLaravelは命名規則として[parent table]_[referencing field]_foreign
を使用します。次のように、このクエリを使用して外部キーの名前を表示できます。 here :
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;