插入前触发不起作用

时间:2018-05-26 10:08:28

标签: mysql database

有一个"会话" table,对于它你需要写一个触发器来检查插入数据之前的日期和时间,如果日期和时间大于或等于当前日期和时间,则可以将值插入表中,否则出错消息显示。

CREATE TABLE `seance` (
`idSeance` int(11) NOT NULL,
`Date/time` datetime NOT NULL,
`Hall_idHall` int(45) DEFAULT NULL,
`Hall_Theatre_idTheatre` int(45) DEFAULT NULL,
`Performance_idPerformance` int(45) NOT NULL,
`price` int(100) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  CREATE TRIGGER `insert_seance` BEFORE INSERT ON `seance`
    FOR EACH ROW BEGIN
      IF (NEW.`Date/time` >= CURRENT_TIMESTAMP)
      THEN
        INSERT INTO seance
          (`idSeance`, `Date/time`, `Hall_idHall`, 
             `Hall_Theatre_idTheatre`,`Performance_idPerformance`, `price`) 
               VALUES (NEW.`idSeance`,NEW.`Date/time`,NEW.`Hall_idHall`,        
  NEW.`Hall_Theatre_idTheatre`,NEW.`Performance_idPerformance`,NEW.`price`);
                ELSE
                SIGNAL SQLSTATE '45000'
                SET MESSAGE_TEXT = 'Error for updating values';

      END IF;
 END

我无法理解为什么会出错?

1442 - 无法更新表格' seance'在存储的函数/触发器中,因为它已被调用此存储函数/触发器的语句使用。

1 个答案:

答案 0 :(得分:0)

这是为数不多的mysql错误消息之一(IMHO)。但是 - 您不需要INSERT语句。如果数据无效,只会出现错误。如果数据有效,您不需要在触发器中执行任何操作。该行将被插入。

genid