1.觸發器
1.1.介紹
觸發器是與表相關的資料庫物件,指在insert/update/delete之前或者之后,觸發并執行觸發器中定義的SQL陳述句集合,觸發器的這種特征可以協助應用在資料庫端確保資料的完整性,日志記錄,資料校驗等操作
使用別名OLD和NEW來引發觸發器中發生變化的記錄內容,這與其他的資料庫是相似的,現在觸發器還只支持行級觸發,不支持陳述句級觸發
觸發器型別 NEW和OLD的使用 INSERT型觸發器 NEW表示將要或者已經新增的資料 UPDTE型觸發器 OLD表示修改之前的資料,NEW表示將要或已經修改后的的資料 DELETE型觸發器 OLD表示將要或者已經洗掉的資料
1.2.創建觸發器的語法
create trigger trigger_name -- trigger表示觸發器 before/after insert/update/delete -- 在什么之前或之后執行 on tbl_name -- 監聽的表名 [for each row] -- 行級觸發器 begin trigger_stmt; -- 觸發器的具體邏輯 end;
1.3.演示樣例
需求:通過觸發器記錄 emp 表的資料變更日志,包含增加,修改,洗掉
創建表:
create table emp( id int auto_increment primary key, name varchar(50) not null comment '姓名', age int null comment '年齡', salary int null comment '薪水' ); create table emp_logs( id int(11) primary key auto_increment, operation varchar(20) not null comment '操作型別(insert/update/delete)', operation_time datetime not null comment '操作時間', operation_id int(11) not null comment '操作表的ID', operation_params varchar(500) comment '操作引數' );創建insert型觸發器,在完成資料插入操作時的日志記錄
create trigger emp_logs_insert after insert on emp for each row begin insert into emp_logs(id, operation, operation_time, operation_id, operation_params) VALUES (null, 'insert', now(), NEW.id, concat('插入后:(id:', NEW.id, ',name:', NEW.name, ',age:', NEW.age, ',salary:', NEW.salary,')')); end; # 查看記錄的的日志資訊 select * from emp_logs where operation = 'insert';創建update型觸發器,在完成資料更新操作時的日志記錄
create trigger emp_logs_update after update on emp for each row begin insert into emp_logs(id, operation, operation_time, operation_id, operation_params) VALUES (null, 'update_before', now(), OLD.id, concat('更新前的資料(id:', OLD.id, ',name:', OLD.name, ',age:', OLD.age, ',salary:', OLD.salary, ')')), (null, 'update_after', now(), NEW.id, concat('更新后的資料(id:', NEW.id, ',name:', NEW.name, ',age:', NEW.age, ',salary:', NEW.salary, ')')); end; # 執行修改操作 update emp set name = '奧巴馬', age = 63 where id = 5; # 查看記錄的日志 select * from emp_logs where operation like '%update%' and operation_id = 5;創建delete型觸發器,在完成資料的洗掉操作后記錄對應的日志記錄
create trigger emp_logs_delete after delete on emp for each row begin insert into emp_logs(id, operation, operation_time, operation_id, operation_params) VALUES (null, 'delete', now(), OLD.id, concat('洗掉的資料(id:', OLD.id, ',name:', OLD.name, ',age:', OLD.age, ',salary:', OLD.salary, ')')); end; # 執行洗掉操作 delete from emp where id = 5; # 查看記錄的的日志 select * from emp_logs where operation = 'delete';
1.4.觸發器的查看和洗掉
# 查看觸發器 show triggers; # 洗掉觸發器 drop trigger trigger_name;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/245329.html
標籤:其他
上一篇:redis 學習筆記1, php redis 鍵命令
下一篇:請教一個關于隱式游標的問題
