我有群组,每个群组都有与之关联的联系人。当用户删除某个组时,如果该组不为空,则会提醒他们如果该组中的所有联系人继续,则将删除该组中的所有联系人。好吧无论如何,所以我的问题是设置这个功能。
我试图找出如何删除属于该群组的所有联系人并删除该群组。
在我继续之前,我想知道但是有没有一种通过外键实现这一目的的自动化方式?
好吧,如果不是它的确定,这是我的查询,但SQL Workbench抛出以下错误
DELETE c
FROM `list_`.`contacts` AS c
INNER JOIN `list_`.`groups` AS g ON c.group_id = g.id
WHERE g.group = 'School'
AND c.user_id = 2;
错误:
Error Code: 1046 No database selected
在这里真的很困惑,我也试过c.*
答案 0 :(得分:2)
MySQL supports multi-table deletions - 使用:
DELETE c, g
FROM `list_`.`contacts` AS c
JOIN `list_`.`groups` AS g ON c.group_id = g.id
AND g.group = 'School'
WHERE c.user_id = 2;
关于错误代码1046,使用WorkBench时,请确保在“对象浏览器”选项卡上方的下拉菜单中选择了相应的数据库/目录。您可以为连接指定默认架构/数据库/目录 - 单击Workbench初始屏幕的SQL Development标题下的“管理连接”选项。
答案 1 :(得分:1)
您没有说明您的RDBMS,但在SQL Server 中您可以启用级联删除,但我不建议这样做;这太危险了。
更新:MySQL InnoDB也支持级联删除:FOREIGN KEY Constraints
首先手动删除所有引用行,然后删除该组更安全。
错误消息“Error Code: 1046 No database selected
”表明它不是您的TSQL错误。你指的是一个数据库吗?
答案 2 :(得分:1)
在Mysql中你可以尝试这样的触发器:
DELIMITER $$
DROP TRIGGER IF EXISTS `deluser`$$
CREATE TRIGGER `deluser` BEFORE DELETE on `biguser`
FOR EACH ROW
BEGIN
DELETE FROM smalluser WHERE id=OLD.id;
END$$
DELIMITER ;
注意:触发器必须在删除之前,否则您可能会丢失要用于删除记录的密钥。
答案 3 :(得分:0)
我认为你可以用触发器做到这一点。