MySQL触发器中获取Session用户ID并记录员工信息变更
如何在MySQL触发器中获取Session中的用户ID并记录员工信息变更
本文将介绍如何在MySQL触发器中获取Session中的用户ID,并记录员工信息变更到shopkeeperchange表中。
初始触发器代码:
CREATE TRIGGER updateshop
AFTER UPDATE ON staff
FOR EACH ROW
BEGIN
IF(OLD.branchid != NEW.branchid OR OLD.deptid != NEW.deptid OR OLD.roleid != NEW.roleid OR NEW.state = 1) THEN
INSERT INTO shopkeeperchange(shopkeeperchange.sid,
shopkeeperchange.staffid,
shopkeeperchange.branchid,
shopkeeperchange.deptid,
shopkeeperchange.roleid,
shopkeeperchange.newbranchid,
shopkeeperchange.newdeptid,
shopkeeperchange.newroleid,
shopkeeperchange.transferper)
VALUES(DEFAULT,
OLD.staffid,
OLD.branchid,
OLD.deptid,
OLD.roleid,
NEW.branchid,
NEW.deptid,
NEW.roleid,
111);
END IF;
END;
如何在上述触发器中加入session中的用户id:
要在上述触发器中加入session中的用户id,可以通过使用MySQL的系统变量来获取用户id。
假设session中的用户id存储在一个名为user_id的系统变量中,可以通过使用SELECT @user_id来获取该值。
修改后的触发器代码:
CREATE TRIGGER updateshop
AFTER UPDATE ON staff
FOR EACH ROW
BEGIN
DECLARE user_id INT;
SET user_id = (SELECT @user_id);
IF (OLD.branchid != NEW.branchid OR OLD.deptid != NEW.deptid OR OLD.roleid != NEW.roleid OR NEW.state = 1) THEN
INSERT INTO shopkeeperchange(shopkeeperchange.sid,
shopkeeperchange.staffid,
shopkeeperchange.branchid,
shopkeeperchange.deptid,
shopkeeperchange.roleid,
shopkeeperchange.newbranchid,
shopkeeperchange.newdeptid,
shopkeeperchange.newroleid,
shopkeeperchange.transferper)
VALUES(DEFAULT,
OLD.staffid,
OLD.branchid,
OLD.deptid,
OLD.roleid,
NEW.branchid,
NEW.deptid,
NEW.roleid,
111);
END IF;
END;
在上面的触发器中,首先声明一个名为user_id的变量,并使用SET语句将session中的用户id赋值给该变量。然后可以在触发器的逻辑中使用该变量来获取用户id的值。
注意:
- 确保在触发器执行前,session中已存在
user_id变量,并且存储了正确的值。 - 使用
SELECT @user_id语句获取系统变量的值。 - 使用
SET语句将获取到的值赋值给声明的变量。 - 可以在触发器的逻辑中使用声明的变量
user_id来记录用户ID信息。
原文地址: https://www.cveoy.top/t/topic/pe8n 著作权归作者所有。请勿转载和采集!