使用MySQL触发器
问题描述:
我有items
表和item_records
表。我想这样做,无论我做什么什么到items
,是它添加项目,删除它(我通过存储过程完成这两项),或更改其ItemAmount
,该项目的状态被记录为行item_records
。使用MySQL触发器
是否可以写入触发器并访问插入,删除或更新的行?到目前为止,我没有见过MySQL的触发器可以这样工作。 (你要知道,我在的Java/JavaScript的,在事件作为对象传递的角度思考基于事件的行动)
答
扩大对我的评论,我创造了我的MySQL服务器上的两个表如下:
CREATE TABLE items (
item_id int not null auto_increment primary key,
item_amount double,
description varchar(50)
);
CREATE TABLE item_records (
record_id int not null auto_increment primary key,
item_id int not null,
status varchar(100)
);
和我然后创建以下三个触发器:
INSERT INTO items (item_amount, description) VALUES (25.50, "Gibit");
INSERT INTO items (item_amount, description) VALUES (10, "Gibit2");
INSERT INTO items (item_amount, description) VALUES (18.25, "Gibit3");
INSERT INTO items (item_amount, description) VALUES (12, "Gibit4");
INSERT INTO items (item_amount, description) VALUES (1.99, "Gibit5");
UPDATE items SET item_amount = 1999.99 WHERE item_id = 4;
DELETE FROM items WHERE item_id = 3;
0123:
CREATE TRIGGER ins_item AFTER INSERT ON items
FOR EACH ROW
INSERT INTO item_records(item_id, status)
VALUES (NEW.item_id, "Inserted")
;
CREATE TRIGGER del_item AFTER DELETE ON items
FOR EACH ROW
INSERT INTO item_records(item_id, status)
VALUES (OLD.item_id, "Deleted")
;
CREATE TRIGGER upd_item AFTER UPDATE ON items
FOR EACH ROW
INSERT INTO item_records(item_id, status)
VALUES (OLD.item_id, CONCAT("Updated Amt ", OLD.item_amount, " to ", NEW.item_amount))
;
插入5个项目,然后更新一个和删除一个,像这样后个
我的表是这样的:
items
item_records
(以1 item_id
不启动差距是因为我搞砸了第一次尝试插入,“用完”1的自动增量值,我没有打扰重置它第一个)
在我看来,这正是MySQL触发器可以执行的操作:http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html您可以访问新更新/插入/删除的行使用'NEW'关键字,并可以执行任何插入或更新到'item_records'你想要的。 –
在MySQL AfterUpdate触发器中,您可以使用“新”和“旧”变量来获取旧行和新行 –