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

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

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

MySQL—觸發(fā)器

? 將兩個關聯(lián)的操作步驟寫到程序里面,并且要用事務包裹起來,確保兩個操作稱為一個原子操作,要么全部執(zhí)行,要么全部不執(zhí)行

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

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

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

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

說明:

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

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

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

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

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

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 = '薪資不得高于領導薪資';
	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ā)器

查看當前數(shù)據(jù)庫所有觸發(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 = '薪資不得高于領導薪資';
	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

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

SHOW CREATE TRIGGER salary_check_trigger\G;

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

SELECT * FROM information_schema.TRIGGERS\G;

刪除觸發(fā)器

DROP TRIGGER salary_check_trigger

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

優(yōu)點:

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

缺點:

  • 可讀性差
  • ER salary_check_trigger

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

#### 優(yōu)點:

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

#### 缺點:

- 可讀性差
- 相關數(shù)據(jù)的變更,可能會導致觸發(fā)器錯誤

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

相關文章

  • Ubuntu安裝Mysql+啟用遠程連接的完整過程

    Ubuntu安裝Mysql+啟用遠程連接的完整過程

    這篇文章主要介紹了Ubuntu如何安裝Mysql+啟用遠程連接,用ssh客戶端或者云服務器廠家提供的網頁版控制臺都行,只要你能連上服務器就行,需要的朋友可以參考下
    2022-06-06
  • 提高MySQL中InnoDB表BLOB列的存儲效率的教程

    提高MySQL中InnoDB表BLOB列的存儲效率的教程

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

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

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

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

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

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

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

    MYSQL單表操作學習之DDL、DML及DQL語句示例

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

    詳解mysql 組合查詢

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

    全面解析MySQL中的隔離級別

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

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

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

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

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

最新評論