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

詳細解讀MySQL的觸發(fā)器trigger

 更新時間:2023年05月09日 09:48:13   作者:九月木碼  
觸發(fā)器是由事件來觸發(fā)某個操作,這些事件包括INSERT、UPDATE和DELETE語句。如果定義了觸發(fā)程序,當數(shù)據(jù)庫執(zhí)行這些語句的時候就會激發(fā)觸發(fā)器執(zhí)行相應的操作,需要的朋友可以參考下

什么是觸發(fā)器

MySQL的觸發(fā)器(trigger)和存儲過程一樣,都是嵌入到MySQL中的一段程序。觸發(fā)器是由事件來觸發(fā)某個操作,這些事件包括INSERT、UPDATE和DELETE語句。如果定義了觸發(fā)程序,當數(shù)據(jù)庫執(zhí)行這些語句的時候就會激發(fā)觸發(fā)器執(zhí)行相應的操作,觸發(fā)程序是與表有關的命名數(shù)據(jù)庫對象,當表上出現(xiàn)特定事件時,將激活該對象。

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

觸發(fā)器是個特殊的存儲過程,不同的是,執(zhí)行存儲過程要使用CALL語句來調用,而觸發(fā)器的執(zhí)行不需要使用CALL語句調用,也不需要手工啟動,只要當一個預定義的事件發(fā)生的時候,就會被MySQL自動調用。比如對student表進行操作(INSERT、DELETE或UPDATE)時就會激活它執(zhí)行。

觸發(fā)器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用于滿足復雜的業(yè)務規(guī)則或要求??梢詣?chuàng)建只有一條語句的觸發(fā)器,不過一般都是有多個執(zhí)行語句的觸發(fā)器用得比較多,即使單條語句的觸發(fā)器,也可以使用多條語句的觸發(fā)器的寫法來寫,看下有多個執(zhí)行語句的觸發(fā)器的基本寫法:

CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

解釋一下:

1、trigger_name標識觸發(fā)器名稱,用戶自行指定

2、trigger_time標識觸發(fā)時機,可以指定為before或after

3、trigger_event標識觸發(fā)事件,包括INSERT、UPDATE和DELETE

4、tbl_name標識建立觸發(fā)器的表名,即在哪張表上建立觸發(fā)器

5、trigger_stmt是觸發(fā)器程序體,觸發(fā)器程序可以使用begin和end作為開始和結束,中間包含多條語句

觸發(fā)器程序可以使用begin和end作為開始和結束,中間包含多條語句。舉個例子,還是以前的學生表:

create table student
(
    studentId            int                 primary key    auto_increment    not null,
    studentName        varchar(10)           not null,
    studentAge        int,
    studentPhone    varchar(15)
)

給學生表的studentName、studentAge、studentPhone三個字段都創(chuàng)建一個觸發(fā)器表:

create table triggerstudentname
(
    t_studentName VARCHAR(10)
);
create table triggerstudentAge
(
    t_studentAge int
);
create table triggerstudentPhone
(
    t_studentPhone VARCHAR(15)
);

創(chuàng)建一個觸發(fā)器,每次插入一條數(shù)據(jù)之后分別往三張表插字段:

CREATE TRIGGER trigger_student AFTER INSERT ON student
FOR EACH ROW 
BEGIN
    INSERT INTO triggerstudentname values(NEW.studentName);
    INSERT INTO triggerstudentAge values(NEW.studentAge);
    INSERT INTO triggerstudentPhone values(NEW.studentPhone);
END

插入三條數(shù)據(jù):

insert into student values(null,'Jack', '11', '55555555');
insert into student values(null,'Dicky', '14', '66666666');
insert into student values(null,'Coco', '19', '77777777');
commit;

看一下三張表的情況:

沒什么問題,執(zhí)行結果顯示,在向student表插入數(shù)據(jù)的同時,triggerstudentname、triggerstudentAge和triggerstudentPhone三張表里面的數(shù)據(jù)都發(fā)生了變化,INSERT動作觸發(fā)了觸發(fā)器。

查看觸發(fā)器

查看觸發(fā)器是指查看數(shù)據(jù)庫中已存在的觸發(fā)器的定義、狀態(tài)和語法信息等。可以通過命令來查看已經創(chuàng)建的觸發(fā)器,有兩種方式可以查看觸發(fā)器,一一講解。

1、SHOW TRIGGERS語句查看觸發(fā)器

通過SHOW TRIGGERS查看觸發(fā)器的語句如下:

SHOW TRIGGERS;

用這個命令來查看一下觸發(fā)器:

有一部分沒截取完整,解釋一下主要部分的含義:

(1)Trigger表示觸發(fā)器的名稱,這里有兩個觸發(fā)器分別是tri_student和trigger_student

(2)Event表示激活觸發(fā)器的事件,這里的兩個觸發(fā)事件為插入操作INSERT

(3)Table表示激活觸發(fā)器的操作對象表,這里都為student表

(4)Statement表示激活觸發(fā)器之后執(zhí)行的語句

(5)Timing表示觸發(fā)器觸發(fā)的時間,分別為插入操作之前(BEFORE)和插入操作之后(AFTER)

2、在triggers表中查看觸發(fā)器信息

SHOW TRIGGERS語句查看當前創(chuàng)建的所有觸發(fā)器信息,這在觸發(fā)器較少的情況下,使用該語句會很方便,如果要查看特定的觸發(fā)器信息,可以直接從infomation_schema數(shù)據(jù)庫中的triggers表中查找,通過SELECT命令查看,基本語法為:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;

比如:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_NAME = 'trigger_student';

可以自己查看一下命令運行的效果

刪除觸發(fā)器

使用DROP TRIGGER語句可以刪除MySQL中已經定義的觸發(fā)器,刪除觸發(fā)器的基本語法為:

DROP TRIGGER [schema_name.]trigger_name;

schema_name表示數(shù)據(jù)庫名稱,是可選的,如果省略了schema_name,將從當前數(shù)據(jù)庫中刪除觸發(fā)器,trigger_name是要刪除的觸發(fā)器的名稱,比如:

DROP TRIGGER school.tri_student

觸發(fā)器tri_student刪除成功

使用觸發(fā)器的注意點

在使用觸發(fā)器的時候需要注意:對于相同的表,相同的事件只能創(chuàng)建一個觸發(fā)器。

比如對表student創(chuàng)建了一個BEFORE INSERT觸發(fā)器,那么如果對表student再次創(chuàng)建一個BEFORE INSERT觸發(fā)器,MySQL將會報錯,此時,只可以在表student上創(chuàng)建AFTER INSERT或者BEFORE UPDATE類型的觸發(fā)器。靈活地運用觸發(fā)器將為操作省去很多麻煩。

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

相關文章

  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解決方法

    mysql Access denied for user ‘root’@’localhost’ (using passw

    這篇文章主要介紹了mysql Access denied for user ‘root’@’localhost’ (using password: YES)解決方法,本文給出詳細的解決步驟及操作注釋,需要的朋友可以參考下
    2015-07-07
  • sql語句中日期相減的操作實例代碼

    sql語句中日期相減的操作實例代碼

    在工作中遇到時間處理,學習了一下SQL的日期處理方面,下面這篇文章主要給大家介紹了關于sql語句中日期相減操作的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • MySQL更新存放JSON的字段、\“ 轉義成 “的問題描述

    MySQL更新存放JSON的字段、\“ 轉義成 “的問題描述

    本篇介紹在執(zhí)行MySQL線上變更時遇到的問題,表現(xiàn)為"更新JSON字段時,實際更新的值與SQL語句中的值不一致,JSON格式錯誤",本文給大家分享問題描述及解決方案,感興趣的朋友一起看看吧
    2022-12-12
  • MYSQL(電話號碼,身份證)數(shù)據(jù)脫敏的實現(xiàn)

    MYSQL(電話號碼,身份證)數(shù)據(jù)脫敏的實現(xiàn)

    在日常開發(fā)需求中會經常遇到數(shù)據(jù)脫敏處理,比如身份證號、手機號,需要使用*進行部分替換顯示。這樣能使敏感隱私信息在一定程度上得到保護。本文就來介紹一下
    2021-05-05
  • 最新mysql 5.7.23安裝配置圖文教程

    最新mysql 5.7.23安裝配置圖文教程

    這篇文章主要為大家詳細介紹了最新 mysql 5.7.23 安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Mysql不同服務器跨庫查詢解決方案

    Mysql不同服務器跨庫查詢解決方案

    本文主要介紹了Mysql不同服務器跨庫查詢解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • MySQL批量插入和唯一索引問題的解決方法

    MySQL批量插入和唯一索引問題的解決方法

    這篇文章主要給大家介紹了關于MySQL批量插入和唯一索引問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • 簡單了解操作mysql數(shù)據(jù)庫的命令行神器mycli

    簡單了解操作mysql數(shù)據(jù)庫的命令行神器mycli

    這篇文章主要介紹了簡單了解操作mysql數(shù)據(jù)庫的命令行神器mycli,今天發(fā)現(xiàn)一個操作數(shù)據(jù)庫的命令行工具,可以自動補全和語法高亮,,需要的朋友可以參考下
    2019-06-06
  • 淺談Mysql在什么情況下會使用內部臨時表

    淺談Mysql在什么情況下會使用內部臨時表

    內部臨時表是一種特殊輕量級的臨時表,本文主要介紹了Mysql在什么情況下會使用內部臨時表,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • MAC下MYSQL數(shù)據(jù)庫密碼忘記的解決辦法

    MAC下MYSQL數(shù)據(jù)庫密碼忘記的解決辦法

    這篇文章主要介紹了Mac操作系統(tǒng)下MYSQL數(shù)據(jù)庫密碼忘記的快速解決辦法,教大家重置MYSQ密碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論