CREATE TABLE `a` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
|
CREATE TABLE `b` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
|
CREATE TABLE `c` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
|
CREATE TABLE `d` (`id` INT NOT NULL, `x` INT NOT NULL DEFAULT 1, PRIMARY KEY (`id`));
|
INSERT INTO `a` (`id`, `x`) VALUES ('1', '1');
|
INSERT INTO `b` (`id`, `x`) VALUES ('1', '1');
|
INSERT INTO `c` (`id`, `x`) VALUES ('1', '1');
|
INSERT INTO `d` (`id`, `x`) VALUES ('1', '1');
|
|
DELIMITER $$
|
CREATE DEFINER = CURRENT_USER TRIGGER `a_AFTER_UPDATE` AFTER UPDATE ON `a` FOR EACH ROW
|
BEGIN
|
UPDATE c SET c.x = c.x + NEW.x-OLD.x WHERE c.id=NEW.id;
|
END$$
|
|
CREATE DEFINER = CURRENT_USER TRIGGER `c_BEFORE_UPDATE` BEFORE UPDATE ON `c` FOR EACH ROW
|
BEGIN
|
DECLARE y INT;
|
SET y = (SELECT x FROM d WHERE d.id=NEW.id);
|
SET NEW.x = NEW.x + y;
|
END$$
|
DELIMITER ;
|
|
UPDATE a JOIN b ON a.id=b.id SET a.x=a.x+b.x WHERE a.id=1;
|