3

私はMySQLでの外部キーの使用に比較的慣れていないので、それらに関する助けを期待していました.

私の問題は、いくつかの列を含むテーブルがあり、そのうちの2つは別のテーブルのキーに依存していることです。一般的なスキームは次のようになります。ここで、'a' と 'b' はそれらの関係を示す列です。

Table 1 (a)
Table 2 (a,b)
Table 3 (a,b) <-- Table in question

表 3 には、表 1 で発生する更新と削除をカスケードする外部キーがあります。表 2 の変更時に、表 3 の列 b を更新と削除で NULL に設定する必要があります (a はそのままにしておく必要があります)。この場合)。外部キーを使用してそのような関係を設定する方法はありますか? トリガーを使用した方がよいでしょうか (これまで使用したことはありません)。

前もって感謝します!

編集: さらに明確にするために、表 2 には主キーとして a と b があり、表 2 を変更すると、表 3 の b にそれらの変更が反映されます。

例:

Table 1:
a
1
2
Table 2:
a  b
1  1
1  2
2  1
2  2
Table 3:
a  b
1  1
2  1
2  2

現在、表 2 から行 1 を削除すると、次のようになります。

Table 1:
a
1
2
Table 2:
a  b
1  2
2  1
2  2
Table 3:
a  b
1  NULL
2  NULL
2  2

私が欲しいのは:

Table 1:
a
1
2
Table 2:
a  b
1  2
2  1
2  2
Table 3:
a  b
1  NULL
2  1
2  2
4

1 に答える 1

0

外部キーはSET NULL(の代わりにON CASCADE) で定義することもでき、これらの定義を混在させることができます。例:

CREATE TABLE Table3 (
    a INT,
    b INT NULL,
    FOREIGN KEY (a) REFERENCES Table1(a)
        ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (b) REFERENCES Table2(b)
        ON DELETE SET NULL ON UPDATE SET NULL
)
于 2013-05-29T09:56:49.193 に答える