最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你了解MySQL中觸發(fā)器的操作

 更新時間:2023年02月17日 10:34:43   作者:陽862  
觸發(fā)器,就是一種特殊的存儲過程。觸發(fā)器和存儲過程一樣是一個能夠完成特定功能、存儲在數(shù)據(jù)庫服務器上的SQL片段。本文將通過簡單的實力介紹一下觸發(fā)器的操作,需要的可以參考一下

概述

介紹

  • 觸發(fā)器,就是一種特殊的存儲過程。觸發(fā)器和存儲過程一樣是一個能夠完成特定功能、存儲在數(shù)據(jù)庫服務器上的SQL片段,但是觸發(fā)器無需調(diào)用,當對數(shù)據(jù)庫表中的數(shù)據(jù)執(zhí)行DML操作時自動觸發(fā)這個SQL片段的執(zhí)行,無需手動條用。
  • 在MySQL中,只有執(zhí)行insert,delete,update操作時才能觸發(fā)觸發(fā)器的執(zhí)行
  • 觸發(fā)器的這種特性可以協(xié)助應用在數(shù)據(jù)庫端確保數(shù)據(jù)的完整性,日志記錄,數(shù)據(jù)校驗等操作。
  • 使用別名OLD和NEW來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫是相似的?,F(xiàn)在觸發(fā)器還只支持行級觸發(fā),不支持語句級觸發(fā)。

觸發(fā)器的特性

  • 什么條件會觸發(fā):l、D、U
  • 什么時候觸發(fā):在增刪改前或者后
  • 觸發(fā)頻率:針對每一行執(zhí)行
  • 觸發(fā)器定義在表上,附著在表上

操作—創(chuàng)建觸發(fā)器

格式

1.創(chuàng)建只有一個執(zhí)行語句的觸發(fā)器

2.創(chuàng)建有多個執(zhí)行語句的觸發(fā)器

操作

演示

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表添加一行數(shù)據(jù),則會自動在user_log添加日志記錄
-- 定義觸發(fā)器:trigger_test1
create trigger trigger_test1 after insert on user 
for each row 
insert into user_logs values(null,now(),'有新用戶添加');
 
-- 在user表添加數(shù)據(jù),讓觸發(fā)器自動執(zhí)行
insert into `user` values(1,'張三','123456');

結(jié)果展示

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表添加一行數(shù)據(jù),則會自動在user_log添加日志記錄
-- 定義觸發(fā)器:trigger_test1
create trigger trigger_test1 after insert on user 
for each row 
insert into user_logs values(null,now(),'有新用戶添加');
 
-- 在user表添加數(shù)據(jù),讓觸發(fā)器自動執(zhí)行
insert into `user` values(1,'張三','123456');
 
-- 需求2:當user表數(shù)據(jù)被修改時,則會自動在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結(jié)果是

操作—new和old

格式

MySQL中定義了NEW和oLD,用來表示觸發(fā)器的所在表中,觸發(fā)了觸發(fā)器的那一行數(shù)據(jù),來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,具體地:

觸發(fā)器類型觸發(fā)器類型的new和old使用
insert型觸發(fā)器new表示將要或已經(jīng)新增的數(shù)據(jù)
update型觸發(fā)器OLD表示修改之前的數(shù)據(jù),NEW表示將要或已經(jīng)修改后的數(shù)據(jù)
delete型觸發(fā)器OLD表示將要或者已經(jīng)刪除的數(shù)據(jù)

使用方法

new.columname(columname為相應數(shù)據(jù)表某一列名)

演示

create trigger trigger_test3 after insert on user
for 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;

操作—查看觸發(fā)器

操作—刪除觸發(fā)器

注意事項

1.MYSQL中觸發(fā)器中不能對本表進行insert ,update ,delete操作,以免遞歸循環(huán)觸發(fā)

2.盡量少使用觸發(fā)器,假設觸發(fā)器觸發(fā)每次執(zhí)行1s,insert table 5o0o條數(shù)據(jù),那么就需要觸發(fā)5oo次觸發(fā)器,光是觸發(fā)器執(zhí)行的時間就花費了500s,而insert 50o條數(shù)據(jù)一共是1s,那么這個insert的效率就非常低了。

3.觸發(fā)器是針對每一行的;對增刪改非常頻繁的表上切記不要使用觸發(fā)器,因為它會非常消耗資源。

到此這篇關于一文帶你了解MySQL中觸發(fā)器的操作的文章就介紹到這了,更多相關MySQL觸發(fā)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

勃利县| 遂平县| 镇宁| 古蔺县| 龙岩市| 昌平区| 洛扎县| 昭觉县| 金平| 新竹县| 屯昌县| 皋兰县| 泾川县| 邳州市| 寿阳县| 金沙县| 晋宁县| 白山市| 阳高县| 莱阳市| 嘉禾县| 容城县| 同仁县| 轮台县| 黑水县| 永修县| 蕲春县| 涿州市| 南宁市| 资中县| 宁晋县| 栾城县| 准格尔旗| 周口市| 阿坝县| 开封市| 姜堰市| 平利县| 阜平县| 会宁县| 肇东市|