2016-11-10 163 views
0

我需要幫助在mySQL Bench上創建BEFORE INSERT觸發器。即時通訊新的這個請。在MYSQL中創建BEFORE INSERT觸發器

CREATE TABLE `quincyninying`.`toytracking` (
`Toyid` INT NOT NULL, 
`ToyName` VARCHAR(50) NULL, 
`Toycost` DECIMAL NULL, 
`ToyAction` VARCHAR(50) NULL, 
`ActionDate` DATETIME NULL, 
PRIMARY KEY (`Toyid`)); 

CREATE TABLE `quincyninying`.`toy` (
`Toyid` INT NOT NULL, 
`ToyName` VARCHAR(50) NULL, 
`Toycost` DECIMAL NULL, 
PRIMARY KEY (`Toyid`)); 

創建上,增加了一個記錄到toytracking表從玩具表記錄正被插入的信息,硬編碼ToyAction,這將是「插入」和當前日期的玩具表中的BEFORE INSERT觸發器並記錄插入的時間。

ERROR 1054: Unknown column 'inserted' in 'NEW' SQL Statement: 
CREATE DEFINER = CURRENT_USER TRIGGER `quincyninying`.`toy_BEFORE_INSERT` BEFORE INSERT ON `toy` 
FOR EACH ROW 
BEGIN 
    IF new.inserted THEN 
     SET @toyaction = 'DELETE'; 
    ELSE 
     SET @toyaction = 'NEW'; 
    END IF; 

    INSERT INTO `quincyninying`.`toytracking` (toyId, ToyName, ToyCost,  Toyaction, ActionDate) 
    VALUES  (new.toyid, new.Toyname, new.Toycost,@Toyaction, now()); 

END 

這引發了我一個錯誤說「錯誤1054:在‘插入’未知列‘新’」

+0

這是很清楚的。 'TOY'表中沒有名爲'inserted'的列。你想達到什麼?而且,你的餐桌設計並不常見。這兩張表格之間有冗餘信息。 – Hermanto

+0

我想玩玩具桌上的BEFORE INSERT觸發器,該玩具桌上的玩具表記錄正在被INSERTED,硬編碼ToyAction的信息添加到玩具跟蹤表中,該玩具表將被'INSERT'和當前日期和時間記錄被插入。 – ninying90

+0

什麼是'IF new.inserted'應該測試? – Barmar

回答

1

擺脫IF new.inserted測試,因爲有這個名字沒有列,只是硬代碼INSERT作爲您在要求中所述的ToyAction列的值。

CREATE DEFINER = CURRENT_USER TRIGGER `quincyninying`.`toy_BEFORE_INSERT` BEFORE INSERT ON `toy` 
FOR EACH ROW 
BEGIN 
    INSERT INTO `quincyninying`.`toytracking` (toyId, ToyName, ToyCost, Toyaction, ActionDate) 
    VALUES (new.toyid, new.Toyname, new.Toycost, 'INSERT', now()); 
END 
+0

謝謝你,巴爾瑪。這與SQL完全不同。我是MySQL的新手。如果是BEFORE UPDATE觸發器,請給我舉個例子嗎?謝謝! – ninying90

0

試試這個:

DELIMITER $$ 

CREATE 
    TRIGGER toy_before_insert BEFORE INSERT 
    ON toy 
    FOR EACH ROW BEGIN 
     IF NEW.Toyaction THEN 
      SET @Toyaction = 'DELETE'; 
     ELSE 
      SET @Toyaction = 'NEW'; 
     END IF; 

     INSERT INTO toytracking (toyId, ToyName, ToyCost, Toyaction, ActionDate) VALUES (NEW.Toyid, NEW.ToyName, NEW.ToyCost, @Toyaction, NOW()); 

END$$ 

DELIMITER ; 
+1

他爲什麼要試試?什麼是「NEW.deleted」? 「玩具」表中沒有「已刪除」列 – Barmar

+0

是的。我現在明白了這是我的錯誤。 –

+0

任何幫助它是BEFORE UPDATE觸發器?謝謝 – ninying90