如果所有子列都有相同的数据,如何使用触发器mysql更新父列
我有一个表名“sys\u parent”,如下所示如果所有子列都有相同的数据,如何使用触发器mysql更新父列,mysql,triggers,Mysql,Triggers,我有一个表名“sys\u parent”,如下所示 |-----|------|--------| | id | name | status | |-----|------|--------| | 101 | bi | n | |-----|-----------|--------|--------| | id | parent_id | name | status | |-----|-----------|--------|--
|-----|------|--------|
| id | name | status |
|-----|------|--------|
| 101 | bi | n |
|-----|-----------|--------|--------|
| id | parent_id | name | status |
|-----|-----------|--------|--------|
| 1 | 101 | b | n |
| 2 | 101 | c | n |
| 3 | 101 | d | y |
另一张表“sys_child”如下所示
|-----|------|--------|
| id | name | status |
|-----|------|--------|
| 101 | bi | n |
|-----|-----------|--------|--------|
| id | parent_id | name | status |
|-----|-----------|--------|--------|
| 1 | 101 | b | n |
| 2 | 101 | c | n |
| 3 | 101 | d | y |
其中sys_child.parent_id是sys_parent.id的外键
问题是,如果我将sys_child的每个状态更新为“n”,则父sys_parent.status将更新为“n”,反之亦然。我试过了
DELIMITER $$
CREATE TRIGGER new_trigger
AFTER UPDATE ON sys_child
FOR EACH ROW
BEGIN
SET @changetype = (SELECT COUNT(*) FROM sys_child GROUP BY `status`);
SET @statustype = (SELECT `status` FROM sys_child GROUP BY `status`);
IF @changetype < 2
THEN UPDATE sys_parent
SET `status`= @statustype;
END IF;
END$$
DELIMITER;
但它不起作用。如何使用mysql触发器实现此目的???此触发器将执行您想要的操作。在更新时,它会找出当前子级的父级有多少子级具有num_children,然后找出其中有多少子级具有与当前子级相同的状态。如果这些值相同,则所有子级都具有相同的状态,并且父级将使用该值更新
DELIMITER $$
CREATE TRIGGER new_trigger
AFTER UPDATE ON sys_child
FOR EACH ROW
BEGIN
DECLARE num_children, this_status INT;
SELECT COUNT(*) INTO num_children FROM sys_child WHERE parent_id = NEW.parent_id;
SELECT COUNT(*) INTO this_status FROM sys_child WHERE parent_id = NEW.parent_id AND status = NEW.status;
IF num_children = this_status THEN
UPDATE sys_parent SET status= NEW.status;
END IF;
END $$
DELIMITER ;
我认为这是因为,您试图将多个值存储到两个变量中。“选择计数*。。。“按状态分组”将给出两行-计数“n”和计数“y”。因此,这里没有设置变量@changetype。。状态类型也是一样。@Krishnakumar那么怎么做呢?非常感谢你。不用担心。很高兴我能再次帮助你:-你真是个了不起的家伙。你能告诉我学习高级mysql的最佳网站吗??