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. mysql的刪除所有記錄刪除外鍵
- 6. vbnet動態按鈕,當被刪除它將刪除文本框中的文本
- 7. Rails:刪除一個視頻對象,當它的youtube源被刪除?
- 8. MySQL的刪除記錄的所有文字,除了關鍵字
- 9. CSS當前類沒有被刪除
- 10. navbar有它的邊框,它不能被刪除
- 11. 刪除有mysql進入外鍵
- 12. MySQL刪除所有表,忽略外鍵
- 13. 當我使用ng-repeat時,對象中的鍵被刪除
- 14. 當'警告;被刪除
- 15. 當視頻被刪除
- 16. jQuery - 當類被刪除
- 17. 從MySQL中刪除外鍵
- 18. mysql外鍵「權限」刪除
- 19. Mysql重複鍵/刪除
- 20. 刪除基於它的鍵值之一
- 21. MySQL - 刪除相關的外鍵
- 22. 如何刪除mysql中的外鍵
- 23. mysql的刪除主鍵不起作用
- 24. 刪除MySQL中的表主鍵
- 25. 重複鍵上的MySQL刪除
- 26. 當Observer被刪除時,NSNotification Observer Closure不會被刪除?
- 27. jQuery - 當複選框被選中時顏色錶行被刪除,當沒有被刪除
- 28. 如何刪除鍵盤當UIButton的
- 29. HashMap上的多個鍵:它刪除現有的值?
- 30. Rails遷移到刪除數據庫(僅當它尚未被刪除時)
可能重複[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