如果所有子列都有相同的数据,如何使用触发器mysql更新父列

olqngx59  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(237)

我有一个表名“sys\u parent”,如下所示

|-----|------|--------|
  | id  | name | status |
  |-----|------|--------|
  | 101 | bi   |   n    |

另一张表格“sys\u child”如下所示

|-----|-----------|--------|--------|
   | id  | parent_id | name   | status |
   |-----|-----------|--------|--------|
   | 1   |     101   |   b    |   n    |
   | 2   |     101   |   c    |   n    |
   | 3   |     101   |   d    |   y    |

你的孩子在哪里。 parent_id 是sys\u父级的外键。 id 问题是,如果我将sys\u child的每个状态都更新为'n',那么父sys\u 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触发器来实现这一点??

7ivaypg9

7ivaypg91#

这个扳机会做你想做的事。在更新时,它会找出当前子级的父级有多少子级( num_children ),然后找出其中有多少子级与当前子级具有相同的状态( this_status ). 如果这些值相同,则所有子级都具有相同的状态,父级将用该值更新。

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 ;

相关问题