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

MySQL觸發(fā)器自動(dòng)智能化的數(shù)據(jù)維護(hù)

 更新時(shí)間:2022年07月11日 14:20:43   作者:王小王_123  
這篇文章主要介紹了MySQL觸發(fā)器自動(dòng)智能化的數(shù)據(jù)維護(hù),觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程。觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能、存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段

觸發(fā)器介紹

觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程。觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能、存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段,但是觸發(fā)器無(wú)需調(diào)用,當(dāng)對(duì)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)執(zhí)行DML操作時(shí)自動(dòng)觸發(fā)這個(gè)SQL片段的執(zhí)行,無(wú)需手動(dòng)條用。

在MySQL中,只有執(zhí)行insert,delete,update操作時(shí)才能觸發(fā)觸發(fā)器的執(zhí)行

觸發(fā)器的這種特性可以協(xié)助應(yīng)用在數(shù)據(jù)庫(kù)端確保數(shù)據(jù)的完整性 , 日志記錄 , 數(shù)據(jù)校驗(yàn)等操作 。

使用別名 OLD 和 NEW 來(lái)引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫(kù)是相似的?,F(xiàn)在觸發(fā)器還只支持行級(jí)觸發(fā),不支持語(yǔ)句級(jí)觸發(fā)。

觸發(fā)器的特性

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

觸發(fā)器語(yǔ)法

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

create trigger 觸發(fā)器名 before|after 觸發(fā)事件
on 表名 for each row
執(zhí)行語(yǔ)句;

2、創(chuàng)建有多個(gè)執(zhí)行語(yǔ)句的觸發(fā)器

create trigger 觸發(fā)器名 before|after 觸發(fā)事件
on 表名 for each row
begin
執(zhí)行語(yǔ)句列表
end;

數(shù)據(jù)準(zhǔn)備

-- 數(shù)據(jù)準(zhǔn)備
create database if not exists db_trigger;
use mydb10_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)
);

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

-- 如果觸發(fā)器存在,則先刪除
drop trigger if exists trigger_test1;
-- 創(chuàng)建觸發(fā)器trigger_test1
create trigger trigger_test1
after insert on user -- 觸發(fā)時(shí)機(jī):當(dāng)添加user表數(shù)據(jù)時(shí)觸發(fā)
for each row
insert into user_logs values(NULL,now(), '有新用戶注冊(cè)');
-- 添加數(shù)據(jù),觸發(fā)器自動(dòng)執(zhí)行并添加日志代碼
insert into user values(1,'張三','123456');

從上面的語(yǔ)法我們可以知道,觸發(fā)器的基本的結(jié)構(gòu)是怎樣的

create trigger 觸發(fā)器名稱 after(before)insert(update,delete)on 表名(監(jiān)控表) for each row 執(zhí)行語(yǔ)句

觸發(fā)器——執(zhí)行多個(gè)觸發(fā)語(yǔ)句

-- 如果觸發(fā)器trigger_test2存在,則先刪除
drop trigger if exists trigger_test2;
-- 創(chuàng)建觸發(fā)器trigger_test2
delimiter $$
create trigger trigger_test2
after update on user -- 觸發(fā)時(shí)機(jī):當(dāng)修改user表數(shù)據(jù)時(shí)觸發(fā)
for each row -- 每一行
begin
insert into user_logs values(NULL,now(), '用戶修改發(fā)生了修改');
end $$
delimiter ;
-- 添加數(shù)據(jù),觸發(fā)器自動(dòng)執(zhí)行并添加日志代碼
update user set password = '888888' where uid = 1;

這里,采用了標(biāo)準(zhǔn)的格式進(jìn)行觸發(fā)器的語(yǔ)法格式,可以定義多個(gè)執(zhí)行語(yǔ)句,將所有的執(zhí)行語(yǔ)句寫在begin end $$里面,也就是需要采用這樣的方式包裹住。

delimiter $$ create trigger 觸發(fā)器名稱 after(before)insert(update,delete)on 表名 for each row  begin 執(zhí)行語(yǔ)句 end $$ delimiter;

也就是說(shuō)我們將出發(fā)語(yǔ)句,放在了begin 和 end $$ 中間

New Old 操作

MySQL 中定義了 NEW 和 OLD,用來(lái)表示觸發(fā)器的所在表中,觸發(fā)了觸發(fā)器的那一行數(shù)據(jù),來(lái)引用觸發(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.columnName (columnName為相應(yīng)數(shù)據(jù)表某一列名)

create trigger trigger_test3 after insert
on user for each row
insert into user_logs values(NULL,now(),concat('有新用戶添加,信息為:',NEW.uid,NEW.username,NEW.password));
-- 測(cè)試
insert into user values(4,'趙六','123456');

查看觸發(fā)器

show triggers;

刪除觸發(fā)器

-- drop trigger [if exists] trigger_name
drop trigger if exists trigger_test1;
  • 1.MYSQL中觸發(fā)器中不能對(duì)本表進(jìn)行 insert ,update ,delete 操作,以免遞歸循環(huán)觸發(fā)
  • 2.盡量少使用觸發(fā)器,假設(shè)觸發(fā)器觸發(fā)每次執(zhí)行1s,insert table 500條數(shù)據(jù),那么就需要觸發(fā)500次觸發(fā)器,光是觸發(fā)器執(zhí)行的時(shí)間就花費(fèi)了500s,而insert 500條數(shù)據(jù)一共是1s,那么這個(gè)insert的效率就非常低了。
  • 3. 觸發(fā)器是針對(duì)每一行的;對(duì)增刪改非常頻繁的表上切記不要使用觸發(fā)器,因?yàn)樗鼤?huì)非常消耗資源。

總結(jié)

既然,在MySQL內(nèi)部創(chuàng)建觸發(fā)器,會(huì)使得表的執(zhí)行效率大大降低,我們又如何去監(jiān)控我們的表操作數(shù)據(jù)呢?答案是,我們可以使用后臺(tái)代碼,比如python、java,通過(guò)連接數(shù)據(jù)庫(kù),實(shí)現(xiàn)對(duì)數(shù)據(jù)的行為進(jìn)行監(jiān)控,達(dá)到我們?nèi)罩镜谋O(jiān)控(表的操作)。

舉一個(gè)簡(jiǎn)單的例子,目前某學(xué)校使用的教務(wù)管理系統(tǒng)是采用傳統(tǒng)的數(shù)據(jù)庫(kù)——mysql,現(xiàn)在老師將學(xué)生的成績(jī)統(tǒng)一上傳到了后臺(tái),但是發(fā)現(xiàn)有一位同學(xué)的成績(jī)出現(xiàn)了錯(cuò)誤,于是它就修改了該同學(xué)的數(shù)據(jù),這個(gè)時(shí)候?qū)iT的記錄操作的表就會(huì)記錄下該老師的操作行為。

到此這篇關(guān)于MySQL觸發(fā)器自動(dòng)智能化的數(shù)據(jù)維護(hù)的文章就介紹到這了,更多相關(guān)MySQL觸發(fā)器 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Windows版mysql?8.0.28?安裝配置方法圖文教程

    Windows版mysql?8.0.28?安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Windows版mysql?8.0.28?安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Mysql鎖內(nèi)部實(shí)現(xiàn)機(jī)制之C源碼解析

    Mysql鎖內(nèi)部實(shí)現(xiàn)機(jī)制之C源碼解析

    數(shù)據(jù)庫(kù)之所以要加鎖,因?yàn)閿?shù)據(jù)庫(kù)是一個(gè)多用戶使用的共享資源。當(dāng)多個(gè)用戶并發(fā)地存取數(shù)據(jù)時(shí),在數(shù)據(jù)庫(kù)中就會(huì)產(chǎn)生多個(gè)事務(wù)同時(shí)存取同一數(shù)據(jù)的情況。若對(duì)并發(fā)操作不加控制就可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫(kù)的一致性
    2022-08-08
  • mysql分表和分區(qū)的區(qū)別淺析

    mysql分表和分區(qū)的區(qū)別淺析

    這篇文章主要介紹了mysql分表和分區(qū)的區(qū)別淺析,并對(duì)它們之間的相同做了分析,需要的朋友可以參考下
    2014-07-07
  • MySQL打印死鎖日志的方法步驟

    MySQL打印死鎖日志的方法步驟

    本文主要介紹了MySQL打印死鎖日志的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Mysql5.7在windows7下my.ini文件加載路徑及數(shù)據(jù)位置修改方法

    Mysql5.7在windows7下my.ini文件加載路徑及數(shù)據(jù)位置修改方法

    這篇文章主要介紹了Mysql5.7在windows7下my.ini文件加載路徑及數(shù)據(jù)位置修改方法,需要的朋友可以參考下
    2018-02-02
  • mssql2008 自定義表類型實(shí)現(xiàn)(批量插入或者修改)

    mssql2008 自定義表類型實(shí)現(xiàn)(批量插入或者修改)

    在做大型網(wǎng)站或者系統(tǒng)的時(shí)候,經(jīng)常會(huì)遇到個(gè)問(wèn)題就是批量插入或者修改數(shù)據(jù)庫(kù);今天這邊不講SqlBulkCopy,只簡(jiǎn)單講sql自定義表類型,感興趣的朋友可以了解下哦,希望本文對(duì)你有所幫助
    2013-01-01
  • 一篇文章學(xué)會(huì)MySQL基本查詢和運(yùn)算符

    一篇文章學(xué)會(huì)MySQL基本查詢和運(yùn)算符

    在MySQL數(shù)據(jù)庫(kù)操作中,運(yùn)算符扮演著較為重要的角色,連接表達(dá)式中的各個(gè)操作數(shù),其作用是用來(lái)指明對(duì)操作數(shù)所進(jìn)行的運(yùn)算,下面這篇文章主要給大家介紹了關(guān)于MySQL基本查詢和運(yùn)算符的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解

    在MySQL中,可以使用LIKE運(yùn)算符進(jìn)行模糊查詢,LIKE運(yùn)算符用于匹配字符串模式,其中可以使用通配符來(lái)表示任意字符或字符序列,這篇文章主要介紹了Mysql 模糊查詢和正則表達(dá)式實(shí)例詳解,需要的朋友可以參考下
    2023-11-11
  • mysql 表索引的一些要點(diǎn)

    mysql 表索引的一些要點(diǎn)

    這篇文章主要介紹了mysql 表索引的一些注意事項(xiàng),mysql默認(rèn)優(yōu)化不如sqlserver,所以需要優(yōu)化,而一些成熟的cms為了利益,也不會(huì)幫大家數(shù)據(jù)庫(kù)優(yōu)化的很好,需要自己另外設(shè)置
    2013-11-11
  • Mysql中的Btree與Hash索引比較

    Mysql中的Btree與Hash索引比較

    這篇文章主要介紹了Mysql中的Btree與Hash索引比較,本文起講解了B-Tree 索引特征、Hash 索引特征等內(nèi)容,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

五原县| 桐庐县| 辛集市| 阿克陶县| 钟山县| 依安县| 额尔古纳市| 延川县| 汝州市| 双鸭山市| 彰化县| 迁西县| 苍梧县| 开原市| 苍溪县| 宁国市| 始兴县| 磐安县| 淳化县| 福清市| 体育| 东乡县| 汾西县| 饶河县| 当阳市| 义乌市| 三台县| 二连浩特市| 静宁县| 得荣县| 嘉峪关市| 当雄县| 临夏县| 大悟县| 吴忠市| 安丘市| 富民县| 高陵县| 乐亭县| 柞水县| 红河县|