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

如果所有子列都有相同的数据,如何使用触发器mysql更新父列,mysql,triggers,Mysql,Triggers,我有一个表名“sys\u parent”,如下所示 |-----|------|--------| | id | name | status | |-----|------|--------| | 101 | bi | n | |-----|-----------|--------|--------| | id | parent_id | name | status | |-----|-----------|--------|--

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

  |-----|------|--------|
  | 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的最佳网站吗??