日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

十七、MySQL触发器(创建、删除、查看)详解

發布時間:2024/7/5 数据库 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十七、MySQL触发器(创建、删除、查看)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

觸發器

一、介紹

觸發器是與表有關的數據庫對象,指在 insert/update/delete 之前或之后,觸發并執行觸發器中定義的SQL語句集合。觸發器的這種特性可以協助應用在數據庫端確保數據的完整性 , 日志記錄 , 數據校驗等操作 。

使用別名 OLD 和 NEW 來引用觸發器中發生變化的記錄內容,這與其他的數據庫是相似的。現在觸發器還只支持行級觸發,不支持語句級觸發。

二、創建觸發器

2.1 語法結構 :

create trigger trigger_name before/after insert/update/delete on tbl_name [ for each row ] -- 行級觸發器 begintrigger_stmt ; end;

2.2 示例
通過觸發器記錄 emp 表的數據變更日志 , 包含增加, 修改 , 刪除 ;

  • 創建emp表,并往表中插入數據:
  • create table emp(id int(11)not null auto_increment,name varchar(50)not null comment'姓名',age int(11)comment'年齡',salary int(11)comment'薪水',primary key(id) )engine=innodb default charset=utf8;insert into emp(id,name,age,salary) values(null,'金毛獅王',55,3800),(null,'白眉鷹王',60,4000),(null,'青翼蝠王',38,2800),(null,'紫衫龍王',42,1800);SELECT * from emp;

  • 創建一張日志表emp_logs :
  • create table emp_1ogs(id int(11)not null auto_increment,operation varchar(20)not null comment'操作類型,insert/update/delete',operate_time datetime not null comment'操作時間',operate_id int(11)not null comment'操作表的ID',operate_params varchar(500)comment'操作參數',primary key(id) )engine=innodb default charset=utf8;
  • 創建insert型觸發器,完成插入數據時的日志記錄:
  • # 創建insert型觸發器,完成插入數據時的日志記錄 delimiter $ create trigger emp_logs_insert_trigger after insert on emp for each row begin insert into emp_logs(id,operation,operate_time,operate_id,operate_params)values(null,'insert',NOW(),new.id,CONCAT('插入后(id:',new.id,',name:',new.name,',age:',new.age,',salary:',new.salary,')')); end $ delimiter ;# 查看觸發器 show triggers;

  • 創建 update 型觸發器,完成更新數據時的日志記錄 :
  • delimiter $ create trigger emp_logs_update_trigger after update on emp for each row begin insert into emp_logs(id,operation,operate_time,operate_id,operate_params)values(null,'update',NOW(),new.id,CONCAT('修改前(id:',old.id,',name:',old.name,',age:',old.age,',salary:',old.salary,');','修改后(id:',new.id,',name:',new.name,',age:',new.age,',salary:',new.salary,')')); end $ delimiter ;
  • 創建delete 行的觸發器 , 完成刪除數據時的日志記錄 :
  • DELIMITER $ create trigger emp_logs_delete_trigger after delete on emp for each row begin insert into emp_logs (id,operation,operate_time,operate_id,operate_params) values(null,'delete',now(),old.id,concat('刪除前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')')); end $ DELIMITER ;


    6. 測試:

    insert into emp(id,name,age,salary) values(null, '光明左使',30,3500); SELECT * from emp;SELECT * from emp_logs;insert into emp(id,name,age,salary) values(null, '光明右使',33,3200); SELECT * from emp;SELECT * from emp_logs;update emp set age = 39 where id = 3; SELECT * from emp;SELECT * from emp_logs;delete from emp where id = 4;SELECT * from emp;SELECT * from emp_logs;








    三、刪除觸發器

    3.1 語法結構 :

    drop trigger [schema_name.]trigger_name

    如果沒有指定 schema_name,默認為當前數據庫

    四、查看觸發器

    show triggers ;

    總結

    以上是生活随笔為你收集整理的十七、MySQL触发器(创建、删除、查看)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。