我正在使用MYSQL 6.0工作台来创建我的触发器。
我有一个表格,用于存储用于维护车辆的金额。 我想创建一个触发器,在更新和插入列时,它将汇总所有值并使用计算出的总和填充已经存在的 TOTAL 列。 我希望这些值存储在表中,而不是运行查询。
表 = Inventory_maintenance(oil_change、制动器、皮带、其他、总计)所有值均为双精度值。 我的表当前为空,正在等待数据。
这些是我到目前为止尝试过的触发器:
USE `car_db`;
DELIMITER $$
CREATE TRIGGER `inventory_maintenance_AINS`
AFTER INSERT ON `inventory_maintenance`
FOR EACH ROW
BEGIN
SET inventory_maintenance.TOTAL =
inventory_maintenance.OIL_CHANGE
+ inventory_maintenance.BELTS
+ inventory_maintenance.BRAKES
+ inventory_maintenance.OTHER ;
END#
错误:
ERROR 1193: Unknown system variable 'TOTAL'
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'inventory_maintenance' already exists**
和。。。。。
USE `car_db`;
DELIMITER $$
CREATE TRIGGER `inventory_maintenance_AINS`
AFTER INSERT ON `inventory_maintenance`
FOR EACH ROW
BEGIN
SET NEW.TOTAL = NEW.OIL_CHANGE + NEW.BELTS + NEW.BRAKES + NEW.OTHER;
END#
错误:
ERROR 1362: Updating of NEW row is not allowed in after trigger
ERROR: Error when running failback script. Details follow.
ERROR 1050: Table 'inventory_maintenance' already exists**
我哪里出错了? 原谅我,但我是触发器的新手。
AFTER
触发器仅在 DML 操作完成后触发。NEW
的范围将一直持续到 DML 操作完成为止。
请参考:触发器启动后;不能更改任何值...
插入执行,值为
NEW 行;数据将写入表中。
AFTER 触发器启动;不能更改任何值,因为它们已经写入表中,但可以从触发器执行其他操作,例如插入/更新/删除其他表中的行。
控制权将返回到应用程序。
如果确实要在新行中设置列的值,请使用BEFORE
触发器。
以下应该有效。
DELIMITER $$
CREATE TRIGGER `inventory_maintenance_BINS`
BEFORE INSERT ON `inventory_maintenance`
FOR EACH ROW
BEGIN
SET NEW.TOTAL = NEW.OIL_CHANGE + NEW.BELTS + NEW.BRAKES + NEW.OTHER;
END#
$$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `inventory_maintenance_BINS`
BEFORE INSERT ON `inventory_maintenance`
FOR EACH ROW
BEGIN
SET NEW.TOTAL = NEW.OIL_CHANGE + NEW.BELTS + NEW.BRAKES + NEW.OTHER;
END#
$$
DELIMITER ;
或者你可以试试这个:
DELIMITER $$
CREATE TRIGGER `inventory_maintenance_BINS`
AFTER INSERT ON `inventory_maintenance`
FOR EACH ROW
BEGIN
SET inventory_maintenance.TOTAL = inventory_maintenance.OIL_CHANGE + inventory_maintenance.BELTS + inventory_maintenance.BRAKES + inventory_maintenance.OTHER;
END#
$$
DELIMITER ;
标签"新建"不能在插入触发器后使用。