国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入學習MYSQL-使用觸發(fā)器

這篇具有很好參考價值的文章主要介紹了深入學習MYSQL-使用觸發(fā)器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

觸發(fā)器

每個表最多支持6個觸發(fā)器,(insert,update,delete)之前和之后。

  • 刪除觸發(fā)器
drop trigger trigger_name;
  • insert 觸發(fā)器
    ? 在INSERT觸發(fā)器代碼內(nèi),可引用一個名為NEW的虛擬表,訪問被插入的行;
    ? 在BEFORE INSERT觸發(fā)器中,NEW中的值也可以被更新(允許更改被插入的值);
    ? 對于AUTO_INCREMENT列,NEW在INSERT執(zhí)行之前包含0,在INSERT執(zhí)行之后包含新的自動生成值。
    下面來看例子(這里書上的例子盡然不可以,不知道是不是版本的原因):
    首先我們創(chuàng)建一個表用于記錄日志
CREATE TABLE product_log (
    log_id INT AUTO_INCREMENT PRIMARY KEY,
    prod_id VARCHAR(50),
    action VARCHAR(50),
    action_date DATETIME
);

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

DELIMITER $$
CREATE TRIGGER newproduct 
AFTER INSERT 
ON products 
FOR EACH ROW 
BEGIN
--這個new 虛擬表可以拿到插入后的值
   INSERT INTO product_log(prod_id, action, action_date) 
   VALUES (NEW.prod_id, 'product added', NOW());
END;$$
DELIMITER ;

深入學習MYSQL-使用觸發(fā)器
同時我們是可以在插入之前修改值的

DELIMITER $$
CREATE TRIGGER beforeinsert 
BEFORE INSERT 
ON products 
FOR EACH ROW 
BEGIN
-- 插入之前更新值
   set NEW.prod_price = 111.0;
END;$$
INSERT INTO `products` VALUES ('ANV10', 1001, '.5 ton anvil', 5.99, '.5 ton anvil, black, complete with handy hook');

我們可以看到執(zhí)行結(jié)果,我們插入里面寫的是5.99但是最終存儲是111.0是因為在插入之前我們更新了這個值
深入學習MYSQL-使用觸發(fā)器
注:這里還有一點在使用before更新值的時候,我們這個列不能是外鍵,外鍵是不能更新成功的。主鍵可以被更新。

  • update觸發(fā)器
    ? 在UPDATE觸發(fā)器代碼中,你可以引用一個名為OLD的虛擬表訪問以前(UPDATE語句前)的值,引用一個名為NEW的虛擬表訪問新更新的值;
    ? 在BEFORE UPDATE觸發(fā)器中,NEW中的值可能也被更新(允許更改將要用于UPDATE語句中的值);
    ? OLD中的值全都是只讀的,不能更新。
    下面我們來看一個例子:
CREATE TABLE test_update(
	id int not null auto_increment primary key,
	before_id char(50) not null,
	after_id char(50) not null
);
DELIMITER $$
CREATE TRIGGER afterupdate 
AFTER UPDATE 
ON products 
FOR EACH ROW 
BEGIN
   INSERT INTO test_update(before_id,after_id)values(old.prod_id,new.prod_id);
END;$$

深入學習MYSQL-使用觸發(fā)器
在update之前我們也可以new中的值,這個用法和insert一樣這里哦不在演示。

  • delete觸發(fā)器
    ? 在DELETE觸發(fā)器代碼內(nèi),你可以引用一個名為OLD的虛擬表,訪問被刪除的行;
    ? OLD中的值全都是只讀的,不能更新。
    這里直接用了之前的表,只是重新改了個名字測試
DELIMITER $$
CREATE TRIGGER beforedelete 
BEFORE DELETE 
ON products 
FOR EACH ROW 
BEGIN
   INSERT INTO test_delete(before_id,after_id)values(old.prod_id,old.prod_id);
END;$$

深入學習MYSQL-使用觸發(fā)器
這個在刪除之前和刪除之后都可以通過old虛擬表拿到值。文章來源地址http://www.zghlxwxcb.cn/news/detail-446319.html

到了這里,關于深入學習MYSQL-使用觸發(fā)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MySQL 觸發(fā)器

    觸發(fā)器是與表有關的數(shù)據(jù)庫對象,指在insert/update/delete之前或之后,觸發(fā)并執(zhí)行觸發(fā)器中定義SQL語句集合。觸發(fā)器的這種特性可以協(xié)助應用在數(shù)據(jù)庫端確保數(shù)據(jù)的完整性,日志記錄,數(shù)據(jù)校驗等操作。 使用別 名OLD 和 NEW 來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫

    2024年02月08日
    瀏覽(20)
  • MySQL進階——觸發(fā)器

    MySQL進階——觸發(fā)器

    同存儲過程和函數(shù)類似,MySQL中的觸發(fā)器也是存儲在系統(tǒng)內(nèi)部的一段程序代碼,可以把它看作是一個特殊的存儲過程。所不同的是,觸發(fā)器無需人工調(diào)用,當程序滿足定義條件時就會被MySQL自動調(diào)用。這些條件可以稱為觸發(fā)事件,包括INSERT、UPDATE和DELETE操作。 從MySQL5.7開始,可

    2024年02月04日
    瀏覽(15)
  • 【MySQL進階】MySQL觸發(fā)器詳解

    【MySQL進階】MySQL觸發(fā)器詳解

    序號 系列文章 7 【MySQL基礎】運算符及相關函數(shù)詳解 8 【MySQL基礎】MySQL多表操作詳解 9 【MySQL進階】MySQL事務詳解 10 【MySQL進階】MySQL視圖詳解 大家好,我是小楊!前面我已經(jīng)為大家介紹了MySQL中的進階知識-視圖,那么今天我們就給大家講解MySQL中的觸發(fā)器這部分的相關內(nèi)容,

    2024年02月03日
    瀏覽(16)
  • MySQL---存儲函數(shù)、觸發(fā)器

    MySQL---存儲函數(shù)、觸發(fā)器

    1. 存儲函數(shù) MySQL 存儲函數(shù)(自定義函數(shù)),函數(shù)一般用于計算和返回一個值,可以將經(jīng)常需要使用的計算 或功能寫成一個函數(shù)。 存儲函數(shù)和存儲過程一樣,都是在數(shù)據(jù)庫中定義一些 SQL 語句的集合。 存儲函數(shù)與存儲過程的區(qū)別: 存儲函數(shù)有且只有一個返回值,而存儲過程可

    2024年02月05日
    瀏覽(237)
  • MySQL 存儲過程&觸發(fā)器&事務

    存儲過程(Stored Procedure),是為了完成特定功能的SQL語句集。 存儲過程可以理解為shell腳本這類型的命令集輸出工具,但是在底層,存儲過程擁有更多的優(yōu)點: 語言的靈活性跟功能性更強 ,在原有基礎之上可以插入 控制語句、循環(huán)語句等 讓SQL語句的功能更強,能夠完成更

    2024年02月04日
    瀏覽(21)
  • MySQL存儲過程和觸發(fā)器

    存儲過程和觸發(fā)器是數(shù)據(jù)庫中用于執(zhí)行特定任務的兩種重要的數(shù)據(jù)庫對象。它們由SQL語句組成,被預先編譯并存儲在數(shù)據(jù)庫中,可以通過調(diào)用來執(zhí)行。以下是對存儲過程和觸發(fā)器的簡要說明以及如何創(chuàng)建和使用它們: 存儲過程(Stored Procedure): 定義: 存儲過程是一組SQL語句

    2024年01月21日
    瀏覽(96)
  • MySQL數(shù)據(jù)庫觸發(fā)器

    查看觸發(fā)器是指查看數(shù)據(jù)庫中已經(jīng)存在的觸發(fā)器的定義、狀態(tài)和語法信息等。MySQL 中查看觸發(fā)器的方法包括 SHOW TRIGGERS 語句和查詢 information_schema 數(shù)據(jù)庫下的 triggers 數(shù)據(jù)表等。本節(jié)將詳細介紹這兩種查看觸發(fā)器的方法。 SHOW TRIGGERS語句查看觸發(fā)器信息 在 MySQL 中,可以通過 S

    2023年04月12日
    瀏覽(19)
  • MySQL小記——存儲過程、觸發(fā)器、函數(shù)、視圖

    目錄 存儲過程 procedure 語法 參數(shù) 調(diào)用存儲過程 call 刪除存儲過程 drop 帶有IF邏輯的存儲過程 if then elseif else 帶有循環(huán)的存儲過程 while do 變量 觸發(fā)器 Trigger 語法 old和new 視圖 View 函數(shù) 自定義函數(shù) 內(nèi)置函數(shù) 存儲過程是數(shù)據(jù)庫中的一個對象,存儲在服務端,用來封裝多條SQL語句

    2024年02月08日
    瀏覽(99)
  • MySQL函數(shù)、視圖、存儲過程及觸發(fā)器

    MySQL函數(shù)、視圖、存儲過程及觸發(fā)器

    MySQL在我們工作中都會用到,那么我們最常接觸的就是增刪改查,而對于增刪改查來說,我們更多的是查詢。但是面試中,面試官又不會問你什么查詢是怎么寫的,都是問一些索引啊,事務啊, 底層結(jié)構(gòu)這些東西,所以我打算分四篇去逐一的過一遍MySQL的知識點。 以下為四篇

    2023年04月09日
    瀏覽(89)
  • MySQL之視圖,觸發(fā)器與存儲過程

    MySQL之視圖,觸發(fā)器與存儲過程

    視圖是一個虛擬表(非真實存在),其本質(zhì)是【根據(jù)SQL語句獲取動態(tài)的數(shù)據(jù)集,并為其命名】,用戶使用時只需使用【名稱】即可獲取結(jié)果集,可以將該結(jié)果集當做表來使用。 使用視圖我們可以把查詢過程中的臨時表摘出來,用視圖去實現(xiàn),這樣以后再想操作該臨時表的數(shù)據(jù)

    2024年02月08日
    瀏覽(87)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包