MYSQL多个触发器

时间:2014-07-07 12:55:10

标签: mysql triggers

我有一个MYSQL表,其中两个字段叫做Rate_per_unit和Cost。首先,我希望字段Rate_per_unit从另一个名为SHD_TEACHER的表中填充自己,然后我希望字段COST也从SHD_TEACHER中的RATE填充自己并乘以UNITS。

我有以下代码,它给了我一个错误:

CREATE TRIGGER RATE_PER_UNIT_1
BEFORE INSERT ON SHD_SCHEDULE
FOR EACH ROW
  SET NEW.RATE_PER_UNIT = 
  (
    SELECT RATE 
      FROM SHD_TEACHER
     WHERE TEACHERID = NEW.TEACHER_ID
     LIMIT 1
  )

SET NEW.COST = (
    SELECT RATE 
      FROM SHD_TEACHER
     WHERE TEACHERID = NEW.TEACHER_ID

  ) * UNITS

请帮忙吗?

感谢

1 个答案:

答案 0 :(得分:0)

使用您的语法,我希望delimiter语句和begin / end块。所以,试试这个:

DELIMITER $$

CREATE TRIGGER RATE_PER_UNIT_1
BEFORE INSERT ON SHD_SCHEDULE
FOR EACH ROW
BEGIN
  SET NEW.RATE_PER_UNIT = 
  (
    SELECT RATE 
      FROM SHD_TEACHER t
     WHERE t.TEACHERID = NEW.TEACHER_ID
     LIMIT 1
  )

  SET NEW.COST = (
    SELECT t.RATE 
      FROM SHD_TEACHER t
     WHERE t.TEACHERID = NEW.TEACHER_ID

  ) * NEW.UNITS
END $$
DELIMITER ;

第一个子查询中有limit 1,表明可能存在多个匹配项。如果是这样,您将在第二个中获得运行时错误。此外,UNITS只是一个人在那里闲逛。我以为它在NEW记录中。

这是另一种写这个的方法:

DELIMITER $$

CREATE TRIGGER RATE_PER_UNIT_1
BEFORE INSERT ON SHD_SCHEDULE
FOR EACH ROW
BEGIN
    SELECT NEW.RATE_PER_UNIT := t.RATE, NEW.COST := t.RATE * NEW.UNITS
    FROM (SELECT t.*
          FROM SHD_TEACHER t
          WHERE t.TEACHERID = NEW.TEACHER_ID
          LIMIT 1
         ) t
END $$
DELIMITER ;