亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL觸發(fā)器使用過(guò)程詳解

 更新時(shí)間:2023年03月01日 11:06:03   作者:瀛臺(tái)夜雪  
觸發(fā)器,就是一種特殊的存儲(chǔ)過(guò)程。觸發(fā)器和存儲(chǔ)過(guò)程一樣是一個(gè)能夠完成特定功能、存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器上的SQL片段。本文將通過(guò)簡(jiǎn)單的實(shí)力介紹一下觸發(fā)器的操作,需要的可以參考一下

MySQL—觸發(fā)器

? 將兩個(gè)關(guān)聯(lián)的操作步驟寫(xiě)到程序里面,并且要用事務(wù)包裹起來(lái),確保兩個(gè)操作稱(chēng)為一個(gè)原子操作,要么全部執(zhí)行,要么全部不執(zhí)行

? 創(chuàng)建一個(gè)觸發(fā)器,讓商品信息數(shù)據(jù)的插入操作自動(dòng)觸發(fā)庫(kù)存數(shù)據(jù)的插入操作

? 觸發(fā)器是由 事件來(lái)觸發(fā) 某個(gè)操作,這些事件包括 INSERT 、 UPDATE 、 DELETE 事件。所謂事件就是指用戶的動(dòng)作或者觸發(fā)某項(xiàng)行為。如果定義了觸發(fā)程序,當(dāng)數(shù)據(jù)庫(kù)執(zhí)行這些語(yǔ)句時(shí)候,就相當(dāng)于事件發(fā)生 了,就會(huì) 自動(dòng) 激發(fā)觸發(fā)器執(zhí)行相應(yīng)的操作。

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

CREATE TRIGGER 觸發(fā)器名稱(chēng)
{BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表明
FOR EACH ROW
觸發(fā)器執(zhí)行語(yǔ)句

說(shuō)明:

表名 :表示觸發(fā)器監(jiān)控的對(duì)象。

BEFORE|AFTER :表示觸發(fā)的時(shí)間。BEFORE 表示在事件之前觸發(fā);AFTER 表示在事件之后觸發(fā)。

INSERT|UPDATE|DELETE :表示觸發(fā)的事件。

  • INSERT 表示插入記錄時(shí)觸發(fā);
  • UPDATE 表示更新記錄時(shí)觸發(fā);
  • DELETE 表示刪除記錄時(shí)觸發(fā)。

觸發(fā)器執(zhí)行的語(yǔ)句塊 :可以是單條SQL語(yǔ)句,也可以是由BEGIN…END結(jié)構(gòu)組成的復(fù)合語(yǔ)句塊。

DELIMITER //
CREATE TRIGGER before_insert_test_tri
BEFORE INSERT ON test_trigger
FOR EACH ROW 
BEGIN
INSERT INTO test_trigger_log(t_node)
VALUES('before insert');
END //
DELIMITER ;
INSERT INTO test_trigger(t_node)
VALUES('test..');
SELECT * FROM test_trigger;
SELECT * FROM test_trigger_log;
DELIMITER //
CREATE TRIGGER salary_check_trigger
BEFORE INSERT ON emp
FOR EACH ROW
BEGIN
	DECLARE mgr_sal DOUBLE;
	SELECT salary INTO mgr_sal FROM emp
	WHERE employee_id = NEW.manager_id;
	IF NEW.salary > mgr_sal
		THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪資不得高于領(lǐng)導(dǎo)薪資';
	END IF;
END //
DELIMITER ;
DESC emp;
INSERT INTO emp(employee_id,last_name,email,hire_date,job_id,salary,manager_id)
VALUES(300,'test','tom@126.com',CURDATE(),'AD_VP',10000,103);

查看觸發(fā)器

查看當(dāng)前數(shù)據(jù)庫(kù)所有觸發(fā)器的定義

mysql> SHOW TRIGGERS\G;
*************************** 1. row ***************************
             Trigger: salary_check_trigger
               Event: INSERT
               Table: emp
           Statement: BEGIN
	DECLARE mgr_sal DOUBLE;
	SELECT salary INTO mgr_sal FROM emp
	WHERE employee_id = NEW.manager_id;
	IF NEW.salary > mgr_sal
		THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪資不得高于領(lǐng)導(dǎo)薪資';
	END IF;
END
              Timing: BEFORE
             Created: 2023-02-28 15:46:44.71
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             Definer: root@%
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci

查看當(dāng)前數(shù)據(jù)庫(kù)中某個(gè)觸發(fā)器的定義

SHOW CREATE TRIGGER salary_check_trigger\G;

從系統(tǒng)庫(kù)information_schema的TRIGGERS表中查詢“salary_check_trigger”觸發(fā)器的信息。

SELECT * FROM information_schema.TRIGGERS\G;

刪除觸發(fā)器

DROP TRIGGER salary_check_trigger

觸發(fā)器優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 可以確保數(shù)據(jù)的完整性
  • 可以幫助記錄操作日志
  • 可以用在操作數(shù)據(jù)前,對(duì)數(shù)據(jù)進(jìn)行合法性檢驗(yàn)

缺點(diǎn):

  • 可讀性差
  • ER salary_check_trigger

### 觸發(fā)器優(yōu)缺點(diǎn)

#### 優(yōu)點(diǎn):

- 可以確保數(shù)據(jù)的完整性
- 可以幫助記錄操作日志
- 可以用在操作數(shù)據(jù)前,對(duì)數(shù)據(jù)進(jìn)行合法性檢驗(yàn)

#### 缺點(diǎn):

- 可讀性差
- 相關(guān)數(shù)據(jù)的變更,可能會(huì)導(dǎo)致觸發(fā)器錯(cuò)誤

到此這篇關(guān)于MySQL觸發(fā)器使用過(guò)程詳解的文章就介紹到這了,更多相關(guān)MySQL觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Ubuntu安裝Mysql+啟用遠(yuǎn)程連接的完整過(guò)程

    Ubuntu安裝Mysql+啟用遠(yuǎn)程連接的完整過(guò)程

    這篇文章主要介紹了Ubuntu如何安裝Mysql+啟用遠(yuǎn)程連接,用ssh客戶端或者云服務(wù)器廠家提供的網(wǎng)頁(yè)版控制臺(tái)都行,只要你能連上服務(wù)器就行,需要的朋友可以參考下
    2022-06-06
  • 提高M(jìn)ySQL中InnoDB表BLOB列的存儲(chǔ)效率的教程

    提高M(jìn)ySQL中InnoDB表BLOB列的存儲(chǔ)效率的教程

    這篇文章主要介紹了提高M(jìn)ySQL中InnoDB表BLOB列的存儲(chǔ)效率的教程,InnoDB的優(yōu)化在MySQL的優(yōu)化研究中也是一個(gè)非常熱門(mén)的課題,需要的朋友可以參考下
    2015-05-05
  • MySQL中CASE?WHEN語(yǔ)句用法、示例與解析舉例

    MySQL中CASE?WHEN語(yǔ)句用法、示例與解析舉例

    這篇文章主要給大家介紹了關(guān)于MySQL中CASE?WHEN語(yǔ)句用法、示例與解析的相關(guān)資料,case when語(yǔ)句用于計(jì)算條件列表并返回多個(gè)可能結(jié)果表達(dá)式之一,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • MySQL5.7.21安裝與密碼圖文配置教程

    MySQL5.7.21安裝與密碼圖文配置教程

    這篇文章主要為大家詳細(xì)介紹了MySQL5.7.21安裝與密碼圖文配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • mysql查看死鎖與去除死鎖示例詳解

    mysql查看死鎖與去除死鎖示例詳解

    這篇文章主要給大家介紹了關(guān)于mysql查看死鎖與去除死鎖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MYSQL單表操作學(xué)習(xí)之DDL、DML及DQL語(yǔ)句示例

    MYSQL單表操作學(xué)習(xí)之DDL、DML及DQL語(yǔ)句示例

    DML、DDL、DCL和DQL是數(shù)據(jù)庫(kù)中常用的四種語(yǔ)言,分別用于數(shù)據(jù)操作、數(shù)據(jù)定義、數(shù)據(jù)控制和數(shù)據(jù)查詢,下面這篇文章主要給大家介紹了關(guān)于MYSQL單表操作學(xué)習(xí)之DDL、DML及DQL語(yǔ)句的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 詳解mysql 組合查詢

    詳解mysql 組合查詢

    這篇文章主要介紹了詳解mysql 組合查詢的的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-12-12
  • 全面解析MySQL中的隔離級(jí)別

    全面解析MySQL中的隔離級(jí)別

    這篇文章主要介紹了MySQL中的隔離級(jí)別的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下。
    2021-01-01
  • linux安裝mysql 8.0.x的完整步驟

    linux安裝mysql 8.0.x的完整步驟

    這篇文章主要給大家介紹了關(guān)于linux安裝mysql 8.0.x的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • mysql 8.0.22.0 下載安裝配置方法圖文教程

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

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.22.0 下載安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11

最新評(píng)論