<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        妙用觸發器有效管理MySQL數據庫

        來源:懂視網 責編:小采 時間:2020-11-09 07:46:21
        文檔

        妙用觸發器有效管理MySQL數據庫

        妙用觸發器有效管理MySQL數據庫:在SQL中,名詞觸發器指在數據庫中為響應一個特殊表格中的某些事件而自動執行的程序代碼。(Wikipedia)說得簡單一些,它是在一個特殊的數據庫事件,如INSERT或DELETE發生時,自動激活的一段代碼。觸發器可方便地用于日志記錄、對單個表格到其他鏈接式表格進行自
        推薦度:
        導讀妙用觸發器有效管理MySQL數據庫:在SQL中,名詞觸發器指在數據庫中為響應一個特殊表格中的某些事件而自動執行的程序代碼。(Wikipedia)說得簡單一些,它是在一個特殊的數據庫事件,如INSERT或DELETE發生時,自動激活的一段代碼。觸發器可方便地用于日志記錄、對單個表格到其他鏈接式表格進行自

        在SQL中,名詞觸發器指在數據庫中為響應一個特殊表格中的某些事件而自動執行的程序代碼。(Wikipedia)說得簡單一些,它是在一個特殊的數據庫事件,如INSERT或DELETE發生時,自動激活的一段代碼。觸發器可方便地用于日志記錄、對單個表格到其他鏈接式表格進行自

        在SQL中,名詞觸發器指“在數據庫中為響應一個特殊表格中的某些事件而自動執行的程序代碼。”(Wikipedia)說得簡單一些,它是在一個特殊的數據庫事件,如INSERT或DELETE發生時,自動激活的一段代碼。觸發器可方便地用于日志記錄、對單個表格到其他鏈接式表格進行自動的“層疊式”更改、或保證對表格關系進行自動更新。當一個新整數值增加到數據庫域中時,自動更新運行的總數的代碼段是一個觸發器。自動記錄對一個特殊數據庫表格所作更改的SQL命令塊也是一個觸發器實例。

          觸發器是MySQL 5.x的新功能,隨著5.x代碼樹新版本的出現,這一功能也逐漸得到改善。在本文中,我將簡單介紹如何定義并使用觸發器,查看觸發器狀態,并如何在使用完畢后刪除觸發器。我還將為你展示一個觸發器在現實世界中的應用實例,并檢驗它對數據庫記錄的改變。

          一個簡單實例

          通過簡單(雖然是人為的)實例來說明是了解MySQL觸發器應用的最佳辦法。首先我們建立兩個單域的表格。一個表格中為姓名列表(表格名:data),另一個表格中是所插入字符的字符數(表格名:chars)。我希望在data表格中定義一個觸發器,每次在其中插入一個新姓名時,chars表格中運行的總數就會根據新插入記錄的字符數目進行自動更新。

          mysql> CREATE TABLE data (name VARCHAR(255));
          Query OK, 0 rows affected (0.09 sec)
          mysql> CREATE TABLE chars (count INT(10));
          Query OK, 0 rows affected (0.07 sec)
          mysql> INSERT INTO chars (count) VALUES (0);
          Query OK, 1 row affected (0.00 sec)
          mysql> CREATE TRIGGER t1 AFTER INSERT ON
          data FOR EACH ROW UPDATE chars SET count = count + CHAR_LENGTH(NEW.name);
          Query OK, 0 rows affected (0.01 sec)

          理解上面代碼的關鍵在于CREATE TRIGGER命令,它被用來定義一個新觸發器。這個命令建立一個新觸發器,假定的名稱為t1,每次有一個新記錄插入到data表格中時,t1就被激活。

          在這個觸發器中有兩個重要的子句:

          AFTER INSERT子句表明觸發器在新記錄插入data表格后激活。

          UPDATE chars SET count = count + CHAR_LENGTH(NEW.name)子句表示觸發器激活后執行的SQL命令。在本例中,該命令表明用新插入的data.name域的字符數來更新chars.count欄。這一信息可通過內置的MySQL函數CHAR_LENGTH()獲得。

          放在源表格域名前面的NEW關鍵字也值得注意。這個關鍵字表明觸發器應考慮域的new值(也就是說,剛被插入到域中的值)。MySQL還支持相應的OLD前綴,可用它來指域以前的值。

          你可以通過調用SHOW TRIGGER命令來檢查觸發器是否被激活。

          mysql> SHOW TRIGGERS/G
          *************************** 1. row ***************************
          ?Trigger: t1
          ?Event: INSERT
          ?Table: data
          Statement: UPDATE chars SET count = count + CHAR_LENGTH(NEW.name)
          Timing: AFTER
          ?Created: NULL
          ql_mode:
          1 row in set (0.01 sec)

          激活觸發器后,開始對它進行測試。試著在data表格中插入幾個記錄:

          mysql> INSERT INTO data (name) VALUES ('Sue'), ('Jane');
          Query OK, 2 rows affected (0.00 sec)
          Records: 2?Duplicates: 0?Warnings: 0

          然后檢查chars表格看觸發器是否完成它該完成的任務:

          mysql> SELECT * FROM chars;
          +-------+
          | count |
          +-------+
          | 7|
          +-------+
          1 row in set (0.00 sec)

          如你所見,data表格中的INSERT命令激活觸發器,它計算插入記錄的字符數,并將結果存儲在chars表格中。如果你往data表格中增加另外的記錄,chars.count值也會相應增加。

          觸發器應用完畢后,可有DROP TRIGGER命令輕松刪除它。

          mysql> DROP TRIGGER t1;
          Query OK, 0 rows affected (0.00 sec)

          注意:理想情況下,你還需要一個倒轉觸發器,每當一個記錄從源表格中刪除時,它從字符總數中減去記錄的字符數。這很容易做到,你可以把它當作練習來完成。提示:應用BEFORE DELETE ON子句是其中一種方法。

          現在,我想建立一個審計記錄來追蹤對這個表格所做的改變。這個記錄將反映表格的每項改變,并向用戶說明由誰做出改變以及改變的時間。我需要建立一個新表格來存儲這一信息(表格名:audit),如下所示。

          mysql> CREATE TABLE audit (id INT(7), balance FLOAT, user VARCHAR(50)
          NOT NULL, time TIMESTAMP NOT NULL);
          Query OK, 0 rows affected (0.09 sec)

          接下來,我將在accounts表格中定義一個觸發器。

          mysql> CREATE TRIGGER t1 AFTER UPDATEON accounts
          FOR EACH ROW INSERT INTO audit (id, balance, user, time)
          VALUES (OLD.id, NEW.balance, CURRENT_USER(), NOW());
          Query OK, 0 rows affected (0.04 sec)

          如果你已經走到這一步,就很容易理解。accounts表格每經歷一次UPDATE,觸發器插入(INSERT)對應記錄的id、新的余額、當前時間和登錄audit表格的用戶的名稱。

          實現中的例子用觸發器審計記錄,既然你了解了觸發器的基本原理,讓我們來看一個稍稍復雜的例子。我們常用觸發器來建立一個自動“審計記錄”,以記錄各種用戶對數據庫的更改。為了解審計記錄的實際應用,請看下面的表格(表格名:accounts),它列出了一個用戶的三個銀行賬戶余額。

          mysql> SELECT * FROM accounts;
          +----+------------+---------+
          | id | label| balance |
          +----+------------+---------+
          |1 | Savings #1 |500 |
          |2 | Current #1 |2000 |
          |3 | Current #2 |3500 |
          +----+------------+---------+
          3 rows in set (0.00 sec)

          然后,檢查觸發器是否被激活:

          mysql> SHOW TRIGGERS /G
          *************************** 1. row ***************************
          ?Trigger: t1
          ?Event: UPDATE
          ?Table: accounts
          Statement: INSERT INTO audit (id, balance, user, time)
          VALUES (OLD.id, NEW.balance, CURRENT_USER(), NOW())
          Timing: AFTER
          ?Created: NULL
          Sql_mode:
          1 row in set (0.01 sec)

          再來看最后的結果:

          mysql> UPDATE accounts SET balance = 500 WHERE id = 1;
          Query OK, 1 row affected (0.00 sec)
          Rows matched: 1?Changed: 1?Warnings: 0
          mysql> UPDATE accounts SET balance = 900 WHERE id = 3;
          Query OK, 1 row affected (0.01 sec)
          Rows matched: 1?Changed: 1?Warnings: 0
          mysql> UPDATE accounts SET balance = 1900 WHERE id = 1;
          Query OK, 1 row affected (0.00 sec)
          Rows matched: 1?Changed: 1?Warnings: 0

          注意,對accounts表格所作的改變已被記錄到audit表格中,將來如果出現問題,我們可以方便地從中進行恢復。

          mysql> SELECT * FROM audit;
          +------+---------+----------------+---------------------+
          | id| balance | user| time|
          +------+---------+----------------+---------------------+
          |1 |500 | root@localhost | 2006-04-22 12:52:15 |
          |3 |900 | root@localhost | 2006-04-22 12:53:15 |
          |1 |1900 | root@localhost | 2006-04-22 12:53:23 |
          +------+---------+----------------+---------------------+
          3 rows in set (0.00 sec)

          如上面的例子所示,觸發器是一個強大的新功能,它大大增強了RDBMS的自動化程度。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        妙用觸發器有效管理MySQL數據庫

        妙用觸發器有效管理MySQL數據庫:在SQL中,名詞觸發器指在數據庫中為響應一個特殊表格中的某些事件而自動執行的程序代碼。(Wikipedia)說得簡單一些,它是在一個特殊的數據庫事件,如INSERT或DELETE發生時,自動激活的一段代碼。觸發器可方便地用于日志記錄、對單個表格到其他鏈接式表格進行自
        推薦度:
        標簽: 妙用 管理 有效
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产成人综合亚洲AV第一页| 女人18毛片a级毛片免费视频| 亚洲欧美中文日韩视频| 免费人成网站永久| 国产乱子影视频上线免费观看| 亚洲人成色在线观看| 国产成人免费网站在线观看| 综合一区自拍亚洲综合图区| 免费一级毛片女人图片| 亚洲国产日韩精品| 成年人免费网站在线观看| 亚洲国产日韩a在线播放| 国产福利免费观看| 杨幂最新免费特级毛片| 亚洲色婷婷综合久久| 亚洲精品免费在线观看| 亚洲 日韩 色 图网站| 国产免费观看视频| 中文字幕乱码系列免费| 免费在线观看黄网| 久久美女网站免费| 国产亚洲综合网曝门系列| 特级毛片免费播放| 精品国产一区二区三区免费看| 国产精品亚洲专区无码WEB| 久久久久亚洲AV无码专区网站 | 亚洲色大成网站www永久一区| 三级毛片在线免费观看| 亚洲国产精品免费在线观看| 精品国产麻豆免费网站| 中文字幕一区二区免费| 国产精品亚洲片在线va| 中文字幕乱码免费视频| 亚洲AV噜噜一区二区三区| 国产午夜亚洲不卡| 免费黄色福利视频| 亚洲成a人片7777| 日韩亚洲精品福利| 人妻巨大乳hd免费看| 亚洲伊人tv综合网色| 99xxoo视频在线永久免费观看|