3

私は現在、主外部キー関係のテーブルを作成しています....

                       book table                    

                bookid     bookname         author
                 0         No book           no author
                 1         Engg Maths        Greiwal
                 2         Java Basics       James Gosling
                 3         Mahabharata       Ved Vyasa
                 4         Ramayana          Valmiki
                 5         Harry Potter      JK Rowling




                        usertable

               userid       name           bookid
                1          Arjun             2
                2          Charles           2
                3          Babbage           3

ここで bookid は usertable の外部キーで、booktable の主キーです..... カスケード、 setnull 、 restrict 、アクション制約なしについて聞いたことがあります....

usertableの列bookidのデフォルト値として0が設定されています.....

Now i want a situation when a bookid(primary) entry is deleted from the main table i.e booktable, the entires containing bookid in the user table should be updated to the default value ( i.e here 0 ).....

何か方法はありますか...???

私が言えることは、私がphpmyadmin mysql innodbに取り組んでいるということだけです......

4

2 に答える 2

2

組み込みの方法はありませんが、回避策があります。これを実現するには、DELETEトリガーを使用できます。

DELIMITER $$
CREATE TRIGGER `book_delete` BEFORE DELETE ON `booktable`
  FOR EACH ROW BEGIN
    UPDATE `usertable` SET `bookid` = 0 WHERE `bookid` = OLD.`bookid`;
  END $$
DELIMITER ;

ただし、0はnullではないことに注意してください。したがって、usertalbeに参照整合性の制約がある場合(つまり、bookidがFOREIGN KEY列として設定されている場合)、エラーがスローされます。

ベストプラクティスとして、実際にはNULLを使用して、ユーザーテーブルの行に対応する行がブックテーブルにないことを意味する必要があります。

于 2012-07-01T21:30:26.680 に答える
1

ON DELETE SET NULLMySQLでは、外部キーで使用できます。

例えば:

CREATE TABLE t1 (
 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 title VARCHAR(256)
) ENGINE=InnoDB;

CREATE TABLE t2 (
 id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 parent_id INT UNSIGNED, 
 INDEX(parent_id),
 FOREIGN KEY (parent_id) REFERENCES t1(id) ON DELETE SET NULL
) ENGINE=InnoDB;

insert into t2 values (null, 3);
insert into t2 values (null, 2);

これにより、テーブルはt2次のようになります。

+----+-----------+
| id | parent_id |
+----+-----------+
|  2 |         2 |
|  1 |         3 |
+----+-----------+

次のように行を削除t1します。

delete from t1 where id = 2;

結果は次のとおりです。

+----+-----------+
| id | parent_id |
+----+-----------+
|  2 |      NULL |
|  1 |         3 |
+----+-----------+

興味深いことに、MySQL はON DELETE SET DEFAULT句を解析しますが、テーブルの作成は失敗します。

したがって、短い答え-削除時に設定できますNULL-しかし、現在、削除時に列のデフォルト値を設定し、外部キー制約を維持する方法はありません。

于 2012-07-01T21:40:48.660 に答える