【发布时间】:2017-03-24 02:36:37
【问题描述】:
我需要帮助在 mySQL Bench 上创建 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`));
在 toy 表上创建一个 BEFORE INSERT 触发器,该触发器将记录添加到 toytracking 表中,其中包含正在插入的 toy 表记录中的信息,硬编码的 ToyAction 将是“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:‘新’中的未知列‘插入’”
【问题讨论】:
-
很清楚。
TOY表上没有名为“已插入”的列。你想达到什么目标?而且,您的桌子设计并不常见。这两个表之间有冗余信息。 -
我想在 toy 表上添加一个 BEFORE INSERT 触发器,该触发器将一条记录添加到 toytracking 表中,其中包含正在插入的玩具表记录中的信息,硬编码的 ToyAction 将是“INSERT”和插入记录的当前日期和时间。
-
IF new.inserted应该测试什么? -
问题说
ToyAction应该是INSERT。但是您的触发器将其设置为DELETE或NEW,具体取决于对不存在列的测试。
标签: mysql