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