外部キー外部キー制約を持つテーブルを削除が失敗した[エラー]


タイトル:外部キー外部キー制約を持つテーブルを削除しますが、[エラー]失敗した
2018年8月2日午前21時59分06秒:DATE
データベース:タグ
---

学校は休止状態にされていた時に帰り、ちょうど学ぶ対多、多対関連する操作。それは我々が使用することを学ばなければならないと言っても、ソートアウトテーブル間の構造、また、それがプロジェクトにいた時間だけで、これらのテーブルの構造を置くカスケードに関連して、それを構成することができます上。私は自分自身に小さなピットを与えるためにここで期待していませんでした。数日前に、いくつかのORM制約にできるだけポストの誰かを参照するには、データベースの外部キー制約は何ですか。また、反対しました。私は実際に制約はありませんあまりにも多くの人々に非常に精通していない、まだデータベース操作のために、おそらく、この問題が発生したことを期待していませんでした。しかし、その利点を持っているが、当然そこにあります。

今日では、時間のテーブルのデータを削除するには、次のエラーを報告しました:

09:55:49.144 [http-nio-8080-exec-6] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Cannot delete or update a parent row: a foreign key constraint fails (`checkin`.`right_umenu`, CONSTRAINT `FKnmg8itd642tdyn6qh1q42h60r` FOREIGN KEY (`menu_detailPid`) REFERENCES `menu_detail` (`id`))
09:55:49.151 [http-nio-8080-exec-6] ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush [could not execute statement]


org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207)
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45)
    at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:3198)
    .......
    

結果が得られ、私はそれは同じだと思う見つけるためにインターネットをした後、問題が外部キーによって引き起こされる(もちろん、エラーメッセージが外部キーで書かれているものを、どのようにそのライン(●の∀の●)知りません) 。オンラインと言うことです:削除操作でテーブル間の外部キーの生成を強制するために、データベースとの間の関係は、チェックリストのリードを削除されません。

ソリューション

SET foreign_key_checks = 0;  // 先设置外键约束检查关闭
 
drop table table1;  // 删除表,如果要删除视图,也是如此
 
SET foreign_key_checks = 1; // 开启外键约束检查,以保持表结构完整性

原理:

それが0に設定されている場合、デフォルトの設定項目は、外部キーをチェックしているFOREIGN_KEY_CHECKS MySQLの環境変数は、あり、外部キー制約はチェックされません。FOREIGN_KEY_CHECKSは、の値を参照してください。

show VARIABLES like "foreign%";

しかし、しかし私もシャットダウンチェック外部キー制約を入れて、それはまた、チェックするためのオープンな場所で与えられています。私は選択の余地がなかったという。

私は、外部キーから項目を削除しようとすると、しかし、RESTRICT代わりにCASCADEだけでなく、私が書きたかった方法を実行するとき、私の他の実行方法に影響を与えるだけでなく、より便利にすることなく削除することができます。

確認するために戻って、このオプションを使用すると、単語が後で更新し、4つの動作を削除することができることを知ることができる、外部キーを定義するデータベースです。

何もアクションは、nullを設定し、デフォルト、カスケードを設定していません。

no action 表示 不做任何操作,

set null 表示在外键表中将相应字段设置为null

set default 表示设置为默认值(restrict)

cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除

だから私は、すべてのああのデータベースを行かなければならない多くのことを実行したいまた、カスケードのようなセットを削除置くとき。

おすすめ

転載: www.cnblogs.com/flytree/p/11622635.html