欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

觸發(fā)器介紹

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

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

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

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

觸發(fā)器的特性

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

觸發(fā)器語法

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

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

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

create trigger 觸發(fā)器名 before|after 觸發(fā)事件
on 表名 for each row
begin
執(zhí)行語句列表
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ā)時機:當(dāng)添加user表數(shù)據(jù)時觸發(fā)
for each row
insert into user_logs values(NULL,now(), '有新用戶注冊');
-- 添加數(shù)據(jù),觸發(fā)器自動執(zhí)行并添加日志代碼
insert into user values(1,'張三','123456');

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

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

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

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

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

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

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

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.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));
-- 測試
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ā)器中不能對本表進行 insert ,update ,delete 操作,以免遞歸循環(huán)觸發(fā)
  • 2.盡量少使用觸發(fā)器,假設(shè)觸發(fā)器觸發(fā)每次執(zhí)行1s,insert table 500條數(shù)據(jù),那么就需要觸發(fā)500次觸發(fā)器,光是觸發(fā)器執(zhí)行的時間就花費了500s,而insert 500條數(shù)據(jù)一共是1s,那么這個insert的效率就非常低了。
  • 3. 觸發(fā)器是針對每一行的;對增刪改非常頻繁的表上切記不要使用觸發(fā)器,因為它會非常消耗資源。

總結(jié)

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

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

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

相關(guān)文章

  • MAC下mysql安裝配置方法圖文教程

    MAC下mysql安裝配置方法圖文教程

    這篇文章主要為大家分享了MAC下mysql安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-06-06
  • 詳解數(shù)據(jù)庫varchar與char有哪些區(qū)別

    詳解數(shù)據(jù)庫varchar與char有哪些區(qū)別

    CHAR和VARCHAR是MySQL中兩種最重要的字符串類型,兩者的原理和區(qū)別也是面試中高頻問題,如果是你,會從哪幾個角度去回答這個問題呢?今天,我給大家總結(jié)了一下相關(guān)知識點,感興趣的朋友一起看看吧
    2023-10-10
  • mysql xtrabackup 備份恢復(fù)實現(xiàn)分享

    mysql xtrabackup 備份恢復(fù)實現(xiàn)分享

    Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具,據(jù)官方介紹,這也是世界上惟一一款開源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫進行熱備的工具
    2012-11-11
  • mysql 5.7.25 安裝配置方法圖文教程

    mysql 5.7.25 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.25 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 詳解數(shù)據(jù)庫連接的URL的寫法及總結(jié)

    詳解數(shù)據(jù)庫連接的URL的寫法及總結(jié)

    這篇文章主要介紹了詳解數(shù)據(jù)庫連接的URL的寫法及總結(jié)的相關(guān)資料這里提供了四種方法1、oracle.2、MySQL.3、SQL Server.4、DB2,需要的朋友可以參考下
    2017-07-07
  • mysql 8.0.14 安裝配置方法圖文教程

    mysql 8.0.14 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.14 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 解決大于5.7版本mysql的分組報錯Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated

    解決大于5.7版本mysql的分組報錯Expression #1 of SELECT list is not in GR

    這篇文章主要介紹了解決大于5.7版本mysql的分組報錯Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated問題,需要的朋友可以參考下
    2019-10-10
  • mysql過濾復(fù)制思路詳解

    mysql過濾復(fù)制思路詳解

    這篇文章主要介紹了mysql過濾復(fù)制的實現(xiàn)思路,主要講解了兩種思路,一種是在主庫的binlog上實現(xiàn)另一種是從庫的sql線程上實現(xiàn),具體實現(xiàn)過程跟隨小編一起看看吧
    2021-08-08
  • MySQL高級查詢語法分析

    MySQL高級查詢語法分析

    在面試過程中經(jīng)常會遇到sq查詢問題,今天小編通過本文給大家介紹下MySQL高級查詢語法分析,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • 圖解MySQL中樂觀鎖扣減庫存原理

    圖解MySQL中樂觀鎖扣減庫存原理

    這篇文章主要為大家詳細(xì)介紹了MySQL中樂觀鎖扣減庫存原理的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04

最新評論