1

我有组,每个组都有与之关联的联系人。当用户删除一个组时,如果该组不为空,那么它会提醒他们如果继续删除该组中的所有联系人。无论如何,所以我的问题是设置该功能。

我试图弄清楚如何删除属于该组的所有联系人并删除该组。

在我继续之前,我想知道是否有一种通过外键自动执行此操作的方法?

好吧,如果不正常,这是我的查询,但 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.*

4

4 回答 4

2

MySQL 支持在单个语句中删除多表- 使用:

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 标题下的“Manage Connections”选项。

于 2010-10-17T04:36:24.443 回答
1

您没有说明您的 RDBMS,但在 SQL Server 中您可以打开级联删除,我不建议这样做;这太危险了。

更新:MySQL InnoDB 也支持级联删除:FOREIGN KEY Constraints

首先手动删除所有引用行,然后删除组更安全。

错误消息“ Error Code: 1046 No database selected”表明这不是您的 TSQL 的错误。你指的是数据库吗?

于 2010-10-17T04:16:33.047 回答
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 ;

注意:触发器必须在删除之前,否则您可能会丢失要用于删除记录的密钥。

于 2010-10-17T04:33:23.400 回答
0

我认为你可以用触发器做到这一点。

于 2010-10-17T04:15:11.007 回答