国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 国内精品一区二区三区αv 国产最新进精品视频 | 国产亚洲第一页 | 亚洲欧美一区二区三区久久 | 亚洲永久精品一区二区三区 | 久久久久久亚洲精品影院 | 久久一区二区三区免费播放 | 久久久一区二区三区不卡 | 亚洲一区二区在线 | 欧美日韩色视频在线观看 | 久久久久女人精品毛片九一 | 亚洲一区二区三区高清 | 欧美多p| 久久亚洲精品国产精品777777 | 国产精品麻豆a在线播放 | 欧美高清在线精品一区二区不卡 | 国产全黄a一级毛片视频 | 成人黄色在线观看 | 一级毛片免费毛片一级毛片免费 | 91午夜精品亚洲一区二区三区 | 欧美日韩色图 | 91av片| 国产毛片一级 | 热久久91| 日韩h视频 | 久久无码精品一区二区三区 | 在线播放国产精品 | 美女一级a毛片免费观看 | 97在线资源| 亚洲欧美日韩综合在线播放 | 欧美 日韩 高清 | 在线观看亚洲专区 | 久久国产精品视频一区 | 国产精品久久精品 | 久久91精品国产91久久 | 久久精品无码一区二区日韩av | 亚洲婷婷在线视频 | 欧美极品在线观看 | 一级毛片一级毛片一级级毛片 | 伊人中文字幕 | 日韩亚洲第一页 | 亚洲欧美日韩一区 |