2015-03-31 75 views
0

我是一名正在學習MySQL的學生,目前在使用觸發器檢查插入時遇到問題。MySQL使用前觸發器更新同一個表

我有以下表

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. 

我從上面的錯誤消息知道我不能更新觸發當前正在使用同一個表。
是否有更新同一個表中的屬性?

回答

0

如果槍支數量正確,不要進行更新,只是讓它通過。如果槍的數量太低或太高,則將其設置爲空。

觸發器會在正常更新之前觸發,您對NEW。*所做的任何更改都將被寫入。

相關問題