《MYSQL教程MySQL 觸發(fā)器的基礎(chǔ)操作(六)》要點(diǎn):
本文介紹了MYSQL教程MySQL 觸發(fā)器的基礎(chǔ)操作(六),希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
MYSQL數(shù)據(jù)庫1.為什么使用觸發(fā)器:?
MYSQL數(shù)據(jù)庫??? 在MySQL數(shù)據(jù)庫中,數(shù)據(jù)庫對(duì)象表是存儲(chǔ)和操作數(shù)據(jù)的邏輯結(jié)構(gòu),而數(shù)據(jù)庫對(duì)象觸發(fā)器則用來實(shí)現(xiàn)由一些表事件觸發(fā)的某個(gè)操作.在數(shù)據(jù)庫系統(tǒng)中,當(dāng)執(zhí)行表事件時(shí),則會(huì)激活觸發(fā)器,從而執(zhí)行器包含的操作.觸發(fā)器的操作包含創(chuàng)建、查看、刪除.?
MYSQL數(shù)據(jù)庫??? 觸發(fā)器是數(shù)據(jù)庫對(duì)象之一,該對(duì)象與編程語言 中的函數(shù)非常類似,都需要聲明、執(zhí)行等.但是觸發(fā)器的執(zhí)行不是由程序調(diào)用,也不是由手工啟動(dòng),而是由事件來觸發(fā)、激活從而實(shí)現(xiàn)執(zhí)行.例如:在學(xué)生表中有學(xué)生名字、學(xué)生總數(shù)字段,每當(dāng)添加一條學(xué)生記錄時(shí),學(xué)生的總數(shù)就必須同時(shí)改變.對(duì)于這個(gè)實(shí)例可以創(chuàng)建一個(gè)觸發(fā)器,每次添加一條學(xué)生記錄時(shí),就執(zhí)行一次計(jì)算學(xué)生總數(shù)的操作,這樣就可保證每次添加一條學(xué)生記錄后,學(xué)生總數(shù)和學(xué)生記錄數(shù)一致.MySQL中在觸發(fā)如下DELETE、INSERT、UPDATE語句時(shí),就會(huì)自動(dòng)執(zhí)行所設(shè)置的操作,其他SQL語句則不會(huì)激活觸發(fā)器.之所以會(huì)經(jīng)常使用觸發(fā)器,是因?yàn)樵搶?duì)象能夠加強(qiáng)數(shù)據(jù)庫表中數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等.
MYSQL數(shù)據(jù)庫2.創(chuàng)建觸發(fā)器:?
??? 按照激活觸發(fā)器時(shí)所執(zhí)行的語句條目,可以將觸發(fā)器分為“一個(gè)執(zhí)行語句的觸發(fā)器”和“多個(gè)執(zhí)行語句的觸發(fā)器”?
MYSQL數(shù)據(jù)庫2.1 創(chuàng)建有一條執(zhí)行語句的觸發(fā)器:
MYSQL數(shù)據(jù)庫語法形式為:
MYSQL數(shù)據(jù)庫
create trigger trigger_name
before | after trigger_event
on table_name for each row trigger_stmt
MYSQL數(shù)據(jù)庫//trigger_name 參數(shù)表示索要?jiǎng)?chuàng)建的觸發(fā)器的名字,觸發(fā)器的名字不能重復(fù).建議觸發(fā)器的命名為trigger_xxx或者tri_xxx;
before和after參數(shù)指定了觸發(fā)器執(zhí)行的時(shí)間,before:指在觸發(fā)器事件之前執(zhí)行觸發(fā)器語句,after:指在觸發(fā)器事件之后執(zhí)行觸發(fā)器語句;
trigger_event表示觸發(fā)事件,即觸發(fā)器執(zhí)行條件,包delete、insert、update語句;table_name觸發(fā)事件操作表的名字;
for each row表示任何一條記錄上的操作滿足觸發(fā)事件都會(huì)觸發(fā)該觸發(fā)器;trigger_stmt表示激活觸發(fā)器后被執(zhí)行的語句.
MYSQL數(shù)據(jù)庫示例:
MYSQL數(shù)據(jù)庫
create trigger tri_diaryteim
before insert on t_dept for each row
insert into t_diary values(null,'t_dept',now());
//功能說明:向部門表插入一條記錄之前向表t_diary插入當(dāng)前時(shí)間記錄.
MYSQL數(shù)據(jù)庫2.2 創(chuàng)建包含多條執(zhí)行語句的觸發(fā)器:
MYSQL數(shù)據(jù)庫語法形式如下:
MYSQL數(shù)據(jù)庫
create trigger trigger_name
before|after trigger_event
on table_name for each row
begin
trigger_stmt
end
MYSQL數(shù)據(jù)庫//比“只有一條執(zhí)行語句的觸發(fā)器”語法多了兩個(gè)關(guān)鍵字begin和end,在這兩個(gè)關(guān)鍵字之間是所要執(zhí)行的多個(gè)執(zhí)行語句的內(nèi)容,執(zhí)行語句之間用分號(hào)隔開.
在mysql中,一般情況下“;”符號(hào)作為語句的結(jié)束符號(hào),可是在創(chuàng)建觸發(fā)器時(shí),需要用到“;”符號(hào)作為執(zhí)行語句的結(jié)束符號(hào).
為了解決該問題,可以使用關(guān)鍵字DELIMITER語句,例如:"DELIMITER$$",可以用來將結(jié)束符號(hào)設(shè)置為“$$”.
MYSQL數(shù)據(jù)庫示例:
MYSQL數(shù)據(jù)庫
DELIMITER $$
create trigger tri_diarytime2
after insert
on t_dept for each row
begin
insert into t_diary values(null,'t_dept',now());
insert into t_diary values(null,'t_dept',now());
end
$$
DELIMITER;
MYSQL數(shù)據(jù)庫3.查看觸發(fā)器:?
MYSQL數(shù)據(jù)庫3.1 通過SHOW TRIGGERS語句查看觸發(fā)器:
MYSQL數(shù)據(jù)庫語法為:
show triggers \G
MYSQL數(shù)據(jù)庫3.2 通過查看系統(tǒng)表triggers實(shí)現(xiàn)查看觸發(fā)器:
MYSQL數(shù)據(jù)庫操作語句為;
MYSQL數(shù)據(jù)庫
use information_schema;
select * from triggers \G
select * from triggers where trigger_name='tri_diarytime2' \G //查看指定觸發(fā)器
MYSQL數(shù)據(jù)庫3.刪除觸發(fā)器:
MYSQL數(shù)據(jù)庫語法為:
drop trigger trigger_name;
MYSQL數(shù)據(jù)庫以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持維易PHP.
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/6389.html