私は通常MS Accessで開発し、時折MySQLのバックエンドに接続します。私はレコードを削除するときに期待していたように、カスケード削除ではないMySQLバックエンドを持っています。私はそれがテーブルの関係(外部キー)をどのように設定したのかと思うのですか?私はこのことが正しいかどうかを知るためにMySQLについて十分に知りません。デザイナービューでは、MySQLのデザイナービューを使用して関係を設定しました。 tblInterviewsの複合主キーフィールド(InterviewID、Coder ID)に対して、これらの2つの主キーフィールド(tblSBは複合IDとして第3フィールドSBidを含む)ごとにtblSBとの2つの別個の関係を作成しました。デザイナービューはAccessとは少し異なります。というのも、一度に複数のフィールドを強調表示して関係を設定することはできません。私は外部キーとの関係を設定するための構文を議論するフォーラムを見つけましたが、それがデザイナーで行ったことと同等かどうかはわかりません。私は特定のレコード(一意のInterviewID、CoderIDの組み合わせ)を削除しようとすると、現在考えられていないと思われます。ALL InterviewIDのCoderIDのインタビューレコード、CoderIDの組み合わせが削除されます(これは他の子テーブルにもカスケード接続されます)。私は、私が現在行っていない方法で私の主キーを設定する必要があるかどうかも疑問に思っています(例えば、インデックスとして設定するなど)。どんな助けもありがとう。前もって感謝します。カスケード削除は意図しないレコードを削除します
0
A
答えて
0
あなたが作成したものを見るには、DDLを見てください。 (SHOW CREATE TABLE)
カスケード削除を含む外部キー制約を強制するには、おそらくinnodbエンジンを使いたいと思うでしょう。 myisamエンジンは外部キーを宣言するDDLを受け入れますが、強制しません。
MySQLは、外部キーが非ユニーク列を対象とするようにします。非UNIQUEキーが標準SQLではありません を参照するFOREIGN KEY制約:The MySQL docsは、SQL標準から
偏差を言います。 標準SQLへのInnoDBの拡張です。
これらをSQLの拡張機能と呼びます。私はそれを間違いと呼びます。
つまり、tblInterviews.interviewIDを参照する外部キーとしてtblSB.interviewIDを宣言できます。標準のSQL dbmsはそれを許可しません。
を言うしかし、システムが参照さ 列がUNIQUEであるか、またはNOT NULLを宣言する要件を強制しません。外部キー NULL以外のキーまたはNULL値を含むキーへの参照の処理は、UPDATEまたはDELETE CASCADEなどの操作ではよく定義されていません( )。 は、UNIQUEおよびNOT NULL キーのみを参照する外部キーを使用することをお勧めします。
私の考え方では、「悪い考えですが、修正する方法はわかりませんので、避けることはあなた次第です。それを試してみてください。しかし、私たちはそれをやっていません」
あなたのコメントに基づいて、私はこの制約が正しいと言います。 。 。
しかし、これらは2つではありません。削除する必要があります。
CONSTRAINT tblSB_ibfk_1
FOREIGN KEY (InterviewID)
REFERENCES tblinterviewrecord (InterviewID)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT tblSB_ibfk_2
FOREIGN KEY (CoderID)
REFERENCES tblinterviewrecord (CoderID)
ON DELETE CASCADE ON UPDATE CASCADE
おそらく、代わりに1 FK(複合PKを参照する複合2カラム上)の2つのFK制約(各列の1、別途PKの2列の各1を参照)を、定義されました。 –
または、FKを間違った方向に定義しました。 –