0
A
回答
2
假設有1到N的關係在父母子女實體之間,所以當你刪除父則相關的兒童將被刪除,只要你想。爲此,您使用ON DELETE CASCADE,如下所示。
您需要注意的是,根據您的設計,如果CHILD實體與一個或多個實體關聯,那麼您可能會導致意外問題,如中斷關係,刪除關聯表中的記錄等。另請閱讀上面鏈接中的存儲引擎也不能使用MuISAM
。
PARENT
CREATE TABLE `parent` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CHILD
CREATE TABLE `child` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`parent_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`),
KEY `FK_1_idx` (`parent_id`),
CONSTRAINT `FK_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
例
填充父
mysql> INSERT INTO parent (name) VALUES ('parent_1'), ('parent_2');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM parent;
+----+----------+
| id | name |
+----+----------+
| 1 | parent_1 |
| 2 | parent_2 |
+----+----------+
2 rows in set (0.00 sec)
填充兒童
mysql> INSERT INTO child (name, parent_id) VALUES ('child_1', 1), ('child_2', 1), ('child_3', 2);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM child;
+----+---------+-----------+
| id | name | parent_id |
+----+---------+-----------+
| 1 | child_1 | 1 |
| 2 | child_2 | 1 |
| 3 | child_3 | 2 |
+----+---------+-----------+
3 rows in set (0.00 sec)
刪除的
mysql> DELETE FROM parent WHERE name = 'parent_1';
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM child;
+----+---------+-----------+
| id | name | parent_id |
+----+---------+-----------+
| 3 | child_3 | 2 |
+----+---------+-----------+
1 row in set (0.00 sec)
2
您可以在表定義中執行此ON DELETE CASCADE
命令。
參見:MySQL foreign key constraints, cascade delete
或者你可以使用觸發器做同樣的:
CREATE
TRIGGER `delete_from_profile`
AFTER DELETE ON `user`
FOR EACH ROW
BEGIN
DELETE
FROM profile
WHERE user_id = old.id;
END
相關問題
- 1. MySQL - 當表被刪除時,索引是否被刪除?
- 2. 當它的FK被清除
- 3. 刪除mysql中的主鍵
- 4. 當它被刪除之前刪除內存
- 5. Rails:刪除一個視頻對象,當它的youtube源被刪除?
- 6. navbar有它的邊框,它不能被刪除
- 7. 刪除有mysql進入外鍵
- 8. MySQL刪除所有表,忽略外鍵
- 9. 當我使用ng-repeat時,對象中的鍵被刪除
- 10. 當視頻被刪除
- 11. Mysql重複鍵/刪除
- 12. 刪除基於它的鍵值之一
- 13. 當Observer被刪除時,NSNotification Observer Closure不會被刪除?
- 14. 重複鍵上的MySQL刪除
- 15. MySQL - 刪除相關的外鍵
- 16. 刪除MySQL中的表主鍵
- 17. jQuery - 當複選框被選中時顏色錶行被刪除,當沒有被刪除
- 18. 如何刪除鍵盤當UIButton的
- 19. HashMap上的多個鍵:它刪除現有的值?
- 20. td內的Div具有1 px邊框。它如何被刪除?
- 21. 隱藏一個項目,當它被刪除這個。$ http.delete()
- 22. MySQL的刪除
- 23. 刪除,有一個外鍵與其它表的錶行
- 24. MySQL報告主鍵,但不能從表中刪除它
- 25. IOS:刪除子視圖,當我鍵入它
- 26. 中刪除所有被刪除的文件接下來的Mercurial
- 27. 當一個元素被點擊時Mysql刪除一個表格
- 28. 有關外鍵和刪除級聯的Mysql問題
- 29. 刪除mysql中沒有主鍵的重複項
- 30. mysql的刪除元素時,它具有與其他
可能重複[MySQL的外鍵約束,級聯刪除](http://stackoverflow.com/questions/2914936/mysql-foreign-key-constraints-cascade-delete) – jpw
確實可以使用外鍵。有關更多信息,請參閱http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html(或查看重複問題)。 – jpw