文章詳情頁
一文帶你了解MySQL中觸發器的操作
瀏覽:106日期:2023-02-18 16:43:53
目錄
- 概述
- 介紹
- 觸發器的特性
- 操作—創建觸發器
- 操作—new和old
- 操作—查看觸發器
- 操作—刪除觸發器
- 注意事項
概述
介紹
- 觸發器,就是一種特殊的存儲過程。觸發器和存儲過程一樣是一個能夠完成特定功能、存儲在數據庫服務器上的SQL片段,但是觸發器無需調用,當對數據庫表中的數據執行DML操作時自動觸發這個SQL片段的執行,無需手動條用。
- 在MySQL中,只有執行insert,delete,update操作時才能觸發觸發器的執行
- 觸發器的這種特性可以協助應用在數據庫端確保數據的完整性,日志記錄,數據校驗等操作。
- 使用別名OLD和NEW來引用觸發器中發生變化的記錄內容,這與其他的數據庫是相似的。現在觸發器還只支持行級觸發,不支持語句級觸發。
觸發器的特性
- 什么條件會觸發:l、D、U
- 什么時候觸發:在增刪改前或者后
- 觸發頻率:針對每一行執行
- 觸發器定義在表上,附著在表上
操作—創建觸發器
格式
1.創建只有一個執行語句的觸發器
2.創建有多個執行語句的觸發器
操作
演示
create database if not exists test_trigger; use test_trigger;-- 用戶表create table `user` ( uid int primary key, username varchar(50) not null, password varchar(50) not null);-- 用戶信息操作日志表create table user_logs( id int primary key auto_increment, time timestamp, log_text varchar(255)); -- 需求1:當user表添加一行數據,則會自動在user_log添加日志記錄-- 定義觸發器:trigger_test1create trigger trigger_test1 after insert on user for each row insert into user_logs values(null,now(),"有新用戶添加"); -- 在user表添加數據,讓觸發器自動執行insert into `user` values(1,"張三","123456");
結果展示
create database if not exists test_trigger; use test_trigger;-- 用戶表create table `user` ( uid int primary key, username varchar(50) not null, password varchar(50) not null);-- 用戶信息操作日志表create table user_logs( id int primary key auto_increment, time timestamp, log_text varchar(255)); -- 需求1:當user表添加一行數據,則會自動在user_log添加日志記錄-- 定義觸發器:trigger_test1create trigger trigger_test1 after insert on user for each row insert into user_logs values(null,now(),"有新用戶添加"); -- 在user表添加數據,讓觸發器自動執行insert into `user` values(1,"張三","123456"); -- 需求2:當user表數據被修改時,則會自動在user_log添加日志記錄delimiter $$create trigger trigger_test2 after update on user for each row begin insert into user_logs values(null,now(),"有用戶信息被修改");end $$delimiter ; update `user` set password ="222222" where uid=1;
需求2結果是
操作—new和old
格式
MySQL中定義了NEW和oLD,用來表示觸發器的所在表中,觸發了觸發器的那一行數據,來引用觸發器中發生變化的記錄內容,具體地:
觸發器類型觸發器類型的new和old使用insert型觸發器new表示將要或已經新增的數據update型觸發器OLD表示修改之前的數據,NEW表示將要或已經修改后的數據delete型觸發器OLD表示將要或者已經刪除的數據使用方法
new.columname(columname為相應數據表某一列名)
演示
create trigger trigger_test3 after insert on userfor each row begin insert into user_logs values(null,now(),concat("有新用戶添加,信息為:",new.uid,new.username,new.password)) ;end; insert into `user` values(2,"李四","24234");
-- update create trigger trigger_test4 after update on user for each row begin insert into user_logs values(null,now(),concat_ws("--","用戶信息有修改,修改后為:",new.uid,new.username,new.password));end; update `user` set password="66666" where uid=2;
-- update create trigger trigger_test5 after update on user for each row begin insert into user_logs values(null,now(),concat_ws("--","用戶信息有修改,修改后為:",new.uid,new.username,new.password, "用戶信息有修改,修改前為:",old.uid,old.username,old.password));end; update `user` set password="988765654" where uid=2;
操作—查看觸發器
操作—刪除觸發器
注意事項
1.MYSQL中觸發器中不能對本表進行insert ,update ,delete操作,以免遞歸循環觸發
2.盡量少使用觸發器,假設觸發器觸發每次執行1s,insert table 5o0o條數據,那么就需要觸發5oo次觸發器,光是觸發器執行的時間就花費了500s,而insert 50o條數據一共是1s,那么這個insert的效率就非常低了。
3.觸發器是針對每一行的;對增刪改非常頻繁的表上切記不要使用觸發器,因為它會非常消耗資源。
到此這篇關于一文帶你了解MySQL中觸發器的操作的文章就介紹到這了,更多相關MySQL觸發器內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
MySQL
上一條:MySQL出現this is incompatible with sql_mode=only_full_group_by錯誤的解決辦法下一條:數據庫設計工具MySQL Workbench使用教程(超級詳細!)
相關文章:
排行榜