MySQL使用before触发器更新同一个表

时间:2015-03-31 04:31:46

标签: mysql

我是一名正在学习MySQL的学生,目前在使用Trigger检查插页时遇到了麻烦。

我有以下表

CREATE TABLE classes
        (Class        CHAR(15) PRIMARY KEY,
         cType        CHAR(2) NOT NULL,
         Country      VARCHAR(12) NOT NULL,
         numGuns      INT(2) NOT NULL,
         Bore         INT(2) NOT NULL,
         Displacement INT(6) NOT NULL);

这个问题要求我在这个数据库上编写以下基于属性的检查:

  • 枪支数量必须介于8至12之间。

我的触发器目前看起来像这样

delimiter $$
CREATE TRIGGER chkGun
BEFORE INSERT ON classes
FOR EACH ROW
BEGIN
  IF NEW.numGuns >= 8 AND NEW.numGuns <= 12 THEN
      UPDATE classes
      SET numGuns = NEW.numGuns;
  ELSE 
      SET NEW.numGuns = NULL;
  END IF;
END$$
DELIMITER ;

我一直收到错误消息

Error Code: 1442. Can't update table 'classes' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

我从上面的错误消息中得知,我无法更新触发器当前使用的同一个表 无论如何都要更新同一个表中的属性吗?

1 个答案:

答案 0 :(得分:0)

如果枪支数量正确,请不要进行更新,只是让它通过。如果枪支数太低或太高,则将其设置为空。

触发器在正常更新之前触发,您对NEW。*所做的任何更改都将被写入。