使用MySQL触发器

问题描述:

我有items表和item_records表。我想这样做,无论我做什么什么items,是它添加项目,删除它(我通过存储过程完成这两项),或更改其ItemAmount,该项目的状态被记录为行item_records使用MySQL触发器

是否可以写入触发器并访问插入,删除或更新的行?到目前为止,我没有见过MySQL的触发器可以这样工作。 (你要知道,我在的Java/JavaScript的,在事件作为对象传递的角度思考基于事件的行动)

+0

在我看来,这正是MySQL触发器可以执行的操作:http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html您可以访问新更新/插入/删除的行使用'NEW'关键字,并可以执行任何插入或更新到'item_records'你想要的。 –

+1

在MySQL AfterUpdate触发器中,您可以使用“新”和“旧”变量来获取旧行和新行 –

扩大对我的评论,我创造了我的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 table

items

item_records table

item_records

(以1 item_id不启动差距是因为我搞砸了第一次尝试插入,“用完”1的自动增量值,我没有打扰重置它第一个)