Mysql学习总结(10)——MySql触发器使用讲解
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
? 觸發(fā)器(TRIGGER)是由事件來觸發(fā)某個操作。這些事件包括INSERT語句、UPDATE語句和DELETE語句。當數(shù)據(jù)庫系統(tǒng)執(zhí)行這些事件時,就會激活觸發(fā)器執(zhí)行相應(yīng)的操作。MySQL從5.0.2版本開始支持觸發(fā)器。在本文中將講解的內(nèi)容包括:
觸發(fā)器的含義和作用
如何創(chuàng)建觸發(fā)器
如何查看觸發(fā)器
如何刪除觸發(fā)器
?????? 觸發(fā)器是由INSERT、UPDATE和DELETE等事件來觸發(fā)某種特定操作。滿足觸發(fā)器的觸發(fā)條件時,數(shù)據(jù)庫系統(tǒng)就會執(zhí)行觸發(fā)器中定義的程序語句。這樣做可以保證某些操作之間的一致性。例如,當學(xué)生表中增加了一個學(xué)生的信息時,學(xué)生的總數(shù)就必須同時改變??梢栽谶@里創(chuàng)建一個觸發(fā)器,每次增加一個學(xué)生的記錄,就執(zhí)行一次計算學(xué)生總數(shù)的操作。這樣就可以保證每次增加學(xué)生的記錄后,學(xué)生總數(shù)是與記錄數(shù)是一致的。觸發(fā)器觸發(fā)的執(zhí)行語句可能只有一個,也可能有多個。本節(jié)將詳細講解創(chuàng)建觸發(fā)器的方法。
一、語法
創(chuàng)建只有一個執(zhí)行語句的觸發(fā)器
MySQL中,創(chuàng)建只有一個執(zhí)行語句的觸發(fā)器的基本形式如下:
創(chuàng)建有多個執(zhí)行語句的觸發(fā)器
MySQL中,觸發(fā)器觸發(fā)的執(zhí)行語句可能有多個。創(chuàng)建有多個執(zhí)行語句的觸發(fā)器的基本形式如下:
1、命名規(guī)則
[sql]? view plain copy
觸發(fā)器必須有名字,最多64個字符,可能后面會附有分隔符.它和MySQL中其他對象的命名方式基本相象.
2、觸發(fā)時間: BEFORE | AFTER?
觸發(fā)器有執(zhí)行的時間設(shè)置:INSERT | UPDATE | DELETE?
3、觸發(fā)事件前后
同樣也能設(shè)定觸發(fā)的事件:它們可以在執(zhí)行insert、update或delete的過程中觸發(fā)。
4.、表
觸發(fā)器是屬于某一個表的:當在這個表上執(zhí)行插入、
更新或刪除操作的時候就導(dǎo)致觸發(fā)器的激活.
我們不能給同一張表的同一個事件安排兩個觸發(fā)器。
5.、( 步長)觸發(fā)間隔
觸發(fā)器的執(zhí)行間隔:FOR EACH ROW子句通知觸發(fā)器
每隔一行執(zhí)行一次動作,而不是對整個表執(zhí)行一次。
6、 語句
觸發(fā)器包含所要觸發(fā)的SQL語句:這里的語句可以是任何合法的語句,
包括復(fù)合語句,但是這里的語句受的限制和函數(shù)的一樣。
Privileges權(quán)限
你必須擁有相當大的權(quán)限才能創(chuàng)建觸發(fā)器(CREATE TRIGGER)。如果你已經(jīng)是Root用戶,那么就足夠了。這跟SQL的標準有所不同。
二、關(guān)于舊的和新創(chuàng)建的列的標識
???? 在觸發(fā)器的SQL語句中,你可以關(guān)聯(lián)表中的任意列。但你不能僅使用列的名稱去標識,那會使系統(tǒng)混淆,因為那里可能會有列的新名(這可能正是你要修改的,你的動作可能正是要修改列名),還有列的舊名存在。因此你必須用這樣的語法來標識: "NEW . column_name"或者"OLD . column_name".這樣在技術(shù)上處理(NEW | OLD . column_name)新和舊的列名屬于創(chuàng)建了過渡變量("transition variables")。?????? 對于INSERT語句,只有NEW是合法的;對于DELETE語句,只有OLD才合法;而UPDATE語句可以在和NEW以及OLD同時使用。
三、使用范例
先創(chuàng)建兩個表、一個訂單表,一個訂單時間表
[sql]? view plain copy
1、創(chuàng)建插入時的觸發(fā)器
[sql]? view plain copy
[sql]? view plain copy
這是訂單時間表中自動插入的數(shù)據(jù):
2、更新時插入數(shù)據(jù)
[sql]? view plain copy
可以看到,時間已經(jīng)更新
3、創(chuàng)建刪除觸發(fā)器
[java]? view plain copy
可以看到,數(shù)據(jù)庫中都沒有數(shù)據(jù)了。
4、查看觸發(fā)器
查看觸發(fā)器是指查看數(shù)據(jù)庫中已存在的觸發(fā)器的定義、狀態(tài)和語法等信息。查看觸發(fā)器的方法包括SHOW TRIGGERS語句和查詢information_schema數(shù)據(jù)庫下的triggers表等。本節(jié)將詳細講解查看觸發(fā)器的方法。
MySQL中,可以執(zhí)行SHOW TRIGGERS語句來查看觸發(fā)器的基本信息。其基本形式如下:
SHOW?TRIGGERS ;
MySQL中,所有觸發(fā)器的定義都存在information_schema數(shù)據(jù)庫下的triggers表中。查詢triggers表,可以查看到數(shù)據(jù)庫中所有觸發(fā)器的詳細信息。查詢的語句如下:
SELECT?*? FROM? information_schema.triggers;
[sql]? view plain copy
6、觸發(fā)器 與存儲過程
觸發(fā)程序不能調(diào)用將數(shù)據(jù)返回客戶端的存儲程序,也不能使用采用CALL語句的動態(tài)SQL
(允許存儲程序通過參數(shù)將數(shù)據(jù)返回觸發(fā)程序)。?
而存儲過程 可以接受參數(shù),將結(jié)果范圍給應(yīng)用程序
轉(zhuǎn)載于:https://my.oschina.net/zhanghaiyang/blog/606467
總結(jié)
以上是生活随笔為你收集整理的Mysql学习总结(10)——MySql触发器使用讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用C#实现Windows下无焦点窗体
- 下一篇: 在centos7中安装MySQL5.7