2016-11-10 13 views
0

mySQLベンチでBEFORE INSERT TRIGGERを作成する際に助けが必要です。私はこれで初めてです。 MYSQLでBEFORE INSERT TRIGGERを作成する

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`)); 

は、「挿入」と現在の日付になります挿入されているおもちゃのテーブルレコードからの情報、ハードコーディングされたToyActionでtoytrackingテーブルにレコードを追加おもちゃのテーブルの上に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 

それは言って私にエラーをスロー「ERROR 1054:で 『挿入』不明な列 『NEW』」何という名前の列、およびちょうどハードはありませんので、

+0

それはかなり明らかです。 'TOY'テーブルに 'inserted'という名前の列がありません。達成したいことは何ですか?また、あなたのテーブルデザインは一般的ではありません。これらの2つのテーブルの間には重複した情報があります。 – Hermanto

+0

私は、INSERTEDされている玩具テーブルレコードからの情報と、INSERTされたToyActionと現在の日付と時間を記録したtoytrackingテーブルにレコードを追加する、玩具テーブルのBEFORE INSERTトリガーを使用したい挿入されます。 – ninying90

+0

「IF new.inserted」とは何をテストしていますか? – Barmar

答えて

1

は、IF new.insertedテストを取り除きます要件に記載されているToyAction列の値としてINSERTコードを入力します。

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

Barmarに感謝します。これは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'とは何ですか? 'toy'テーブルに' deleted'カラムはありません – Barmar

+0

はい。私は今これを私の間違いです。 –

+0

BEFORE UPDATEトリガーは何ですか?ありがとうございます – ninying90

関連する問題