-4

たとえば、次のデータベース テーブル レイアウトを作成するとします。

CREATE TABLE IF NOT EXISTS Users_parent (
ID int(255) NOT NULL AUTO_INCREMENT,
Username text NOT NULL,
Password text NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS Users_Child (
ID int(255) NOT NULL AUTO_INCREMENT,
Firstname varchar(255) NOT NULL,
SecondName varchar(255) NOT NULL,
UserID int(255) NOT NULL,

)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS Users_OtherChild (
ID int(255) NOT NULL AUTO_INCREMENT,
Warnings text NOT NULL,
UserID text NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

読み取りからUserID、同じスキーマ内の他のすべての関連テーブルとの1対多の関係を確立するための外部キーになります。

これが MySQL データベース内のストアド プロシージャ内で実行されることは理解していますが、すべての子テーブルが削除されるまで親テーブルの行の削除を禁止して、親に関連付けられた子情報がなくなるようにするにはどうすればよいでしょうか?

4

2 に答える 2

1

外部キーは、親テーブルを参照するテーブルに子が残っている間 (ユーザー ID フィールドによって参照される行のように)、親の行 (id を持つ) が削除されるのを防ぎます。

質問: なぜ子テーブルを削除したいのですか? あなたの例では必要ないと思います。そのテーブルに子が残っている限り、参照は保持されます。

外部キーの作成方法については、mysql のドキュメントを参照してください。

http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html

于 2013-08-26T21:12:21.810 に答える
1

親テーブルから子テーブルに削除を伝播するには、ON DELETE CASCADEオプションで外部キーを実装する必要があります。

カスケード削除の強制の詳細な説明については、こちらを参照してください

于 2013-08-26T21:13:30.140 に答える