web-dev-qa-db-ja.com

MySQLテーブルから制約を削除する方法

テーブルから制約を削除したいです。私の質問は:

ALTER TABLE `tbl_magazine_issue` 
DROP CONSTRAINT `FK_tbl_magazine_issue_mst_users`

しかし、私はエラーを得ました:

#1064 - SQL構文にエラーがあります。 1行目でnear 'FK_tbl_magazine_issue_mst_users'を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

217
deepu sankar

MySQLは外部キー制約を削除するための特別な構文を持っています。

ALTER TABLE tbl_magazine_issue
  DROP FOREIGN KEY FK_tbl_magazine_issue_mst_users
381
Bohemian

私は同じ問題を抱えていて、私はこのコードで解決しなければなりませんでした:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;
ALTER TABLE `table_name` DROP INDEX  `id_name_fk`;
44

MySQLにはDROP CONSTRAINTのようなものはありません。あなたの場合は、代わりにDROP FOREIGN KEYを使うことができます。

24
Lothar

制約が外部キーではない場合'UNIQUE CONSTRAINT(colA、colB)'を使用して追加されたものは、ALTER TABLE ... DROP INDEX ...を使用して削除できるインデックスです。

11
Robert Knight

また、ニース、mysqlデータベースからすべての外部キーチェックを一時的に無効にすることができます:SET FOREIGN_KEY_CHECKS=0;そして再び有効にするには:SET FOREIGN_KEY_CHECKS=1;

6
roelleor

Robert Knightの回答に少し追加すると、投稿のタイトル自体は外部キーに言及していないので(そして彼の完全なコードサンプルがないため、そしてSOのコメントコードブロックも回答のコードと同様に表示されないブロック)、 unique の制約に対してこれを追加します。これらのどちらでも、制約をなくすことができます。

ALTER TABLE `table_name` DROP KEY `uc_name`;

または

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

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クエリとその正しい名前を実行して、外部キーを削除します。

3
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つのオプションがあります。a。テーブル構造b.関係ビュー
  3. 関係ビュー をクリックしてください。ここで外部キー制約を削除できます。あなたはここですべての関係を得るでしょう。
1
A S