从另一个表中删除特定行时删除表中的行
我有组,每个组都有与之关联的联系人。当用户删除一个组时,如果该组不为空,那么它会提醒他们,如果该组中的所有联系人都继续,将会被删除。无论如何,所以我的问题是设置该功能。从另一个表中删除特定行时删除表中的行
我试图找出如何删除属于该组并删除该组以及所有联系人。
在我继续之前,我想知道,但有没有一种通过外键做到这一点的自动化方式?
那么,如果没有它的确定,这是我的查询,但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.*
在一条语句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,使用工作台时,请确保相应的数据库/目录在下拉菜单中的对象浏览器选项卡中找到以上选择。您可以指定连接的默认模式/数据库/目录 - 单击工作台启动画面的SQL开发标题下的“管理连接”选项。
我尝试了类似于您的建议,但我的问题在于错误代码1046,没有选择数据库不会消失。不知道该怎么做 – Eli 2010-10-17 04:41:17
@ s2xi:看到我的附加评论 - 你建立了与数据库的连接,但它需要一个模式/数据库/目录上下文。在查询中拥有数据库是不够的。 – 2010-10-17 04:42:56
你不说出你的RDBMS,但在SQL Server 你可以打开级联删除,但我不会建议这样做;这太危险了。
更新:MySQL的InnoDB支持级联删除,以及:FOREIGN KEY Constraints
它是安全的第一手动删除所有引用行,然后删除该组。
错误消息“Error Code: 1046 No database selected
”表明,这不是你的错TSQL。你是否指向一个数据库?
在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 ;
注:触发必须是之前删除,否则你可能会失去你想用来删除记录的关键。
您正在寻找级联删除可能('上delete') – vittore 2010-10-17 04:16:55
你尝试过'DELETE FROM ...'? – vittore 2010-10-17 04:22:47
CREATE TABLE触点 ( ID SMALLINT UNSIGNED NOT NULL PRIMARY KEY, 描述VARCHAR(40), 外键(GROUP_ID)参考文献基团(ID) ON DELETE CASCADE ON UPDATE CASCADE); – vittore 2010-10-17 04:24:40