触发器是与表有关的数据库对象,可以在表的insert、update、delete操作之前或之后触发并执行触发器中定义的sql语句。
这种特性可以协助引用系统在数据库段确保数据的完整性、日志记录、数据校验等操作。
使用别名new(新的)和old(旧的)来应用触发器中发生变化的内容记录。
触发器的分类
触发器的语法
account表数据:
account_log数据:
触发器的创建
# insert型触发器
DELIMITER $
CREATE TRIGGER trig1
AFTER INSERT
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log(operateType,operateTime,account_id,remarks)
VALUES('insert',NOW(),new.id,CONCAT("插入的数据{id=",new.id,",u_name=",new.u_name,",money=",new.money,"}"));
END$
DELIMITER ;
# delete型触发器
DELIMITER $
CREATE TRIGGER trig2
BEFORE DELETE
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log(operateType,operateTime,account_id,remarks)
VALUES('delete',NOW(),old.id,CONCAT("删除的数据{id=",old.id,",u_name=",old.u_name,",money=",old.money,"}"));
END$
DELIMITER ;
# delete型触发器
DELIMITER $
CREATE TRIGGER trig3
BEFORE UPDATE
ON account
FOR EACH ROW
BEGIN
INSERT INTO account_log(operateType,operateTime,account_id,remarks)
VALUES('delete',NOW(),new.id,CONCAT("修改前的数据{id=",old.id,",u_name=",old.u_name,",money=",old.money,"}"
"修改后的数据{id=",new.id,",u_name=",new.u_name,",money=",new.money,"}"));
END$
DELIMITER ;
# 添加账户表中的数据
INSERT INTO account(u_name,money) VALUES('张三',600);
# 查看日志表中的数据
select * from account_log;
# 删除账户表中的数据
DELETE FROM account WHERE u_name='张三';
# 查看日志表中的数据
select * from account_log;
# 修改账户表中的数据
UPDATE account SET u_name='mark' WHERE u_name='jack';
# 查看日志表中的数据
select * from account_log;
查看触发器以及删除触发器
总结:触发器的关键字是trigger,可以用它来对触发器进行操作,因为触发器的性质,在日志中受到广泛使用。
打卡第16天,欢迎对数据库感兴趣的朋友一起讨论、交流,请多指教!