引言:
觸發(fā)器的作用就不用說(shuō)了吧,也許你在sqlserver或者其他的數(shù)據(jù)庫(kù)里頭早就用過(guò)觸發(fā)器拉.所以這里直接介紹mysql5下怎
么使用觸發(fā)器.具體的語(yǔ)法細(xì)則這里也不說(shuō),可以到搜索引擎里頭搜索"mysql5
觸發(fā)器",一大堆的參考資料,不過(guò)基本上是一個(gè)出身,都只簡(jiǎn)單介紹了語(yǔ)法.沒有太多實(shí)際的例子.下面就從實(shí)際例子出發(fā)來(lái)學(xué)習(xí)一下哦.
正文:
我們先假設(shè)我們有這樣一個(gè)用戶信息表、用戶評(píng)價(jià)表:
[說(shuō)明:我們的表可能建得不大規(guī)范,不要追究這個(gè),因?yàn)閮H僅是個(gè)演示觸發(fā)器的例子哦]
表名:(用戶表)User_tab、(用戶評(píng)價(jià)表)User_score
User_tab表結(jié)構(gòu)如下:
字段名 字段類型 鍵 備注
用戶編號(hào)(id) int pk auto_increment
登陸名(login_name) varchar(20) not null
登陸密碼(login_pw) varcahr(20) not null
加密密碼(login_enc_pw) varchar(32)
注冊(cè)時(shí)間(reg_time) datetime
User_score表結(jié)構(gòu)如下:
用戶編號(hào)(id) int fk User_tab(id)
用戶評(píng)價(jià)(score) int
我們對(duì)該表有如下操作:
1)在用戶注冊(cè)的時(shí)候需要用戶輸入登陸名、登陸密碼,用戶編號(hào),加密密碼和注冊(cè)時(shí)間由系統(tǒng)自動(dòng)更新
2)假如我們要?jiǎng)h除某個(gè)用戶信息,那么該用戶的評(píng)價(jià)信息也得刪除,我們也讓系統(tǒng)自動(dòng)實(shí)現(xiàn)
先創(chuàng)建這兩個(gè)表哦,代碼就不列出拉。
下面我們?yōu)榱俗屜到y(tǒng)自動(dòng)實(shí)現(xiàn)這些東西,寫兩個(gè)觸發(fā)器
1)觸發(fā)器一[更新操作]
功能:在插入用戶的登陸名和登陸密碼進(jìn)入數(shù)據(jù)庫(kù)之后,系統(tǒng)自動(dòng)更新該用戶的注冊(cè)時(shí)間和加密密碼信息(用戶編號(hào)不用我們做,是因?yàn)槲覀冊(cè)O(shè)置了auto_increment,所以系統(tǒng)會(huì)自增)
名字:User_tab_before_insert(表名_觸發(fā)時(shí)機(jī)_操作)
代碼:
Code:
[Ctrl+A Select All]
2)觸發(fā)器二[刪除操作]
功能:在刪除某個(gè)用戶信息之后,系統(tǒng)自動(dòng)刪除該用戶的評(píng)價(jià)信息
名字:User_tab_before_delete
代碼:
Code:
[Ctrl+A Select All]
總結(jié):
到這里我們要用的觸發(fā)器的功能基本實(shí)現(xiàn)拉。我們通常要用戶要做的操作也就這些:自動(dòng)實(shí)現(xiàn)某些功能,以維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性。
需要補(bǔ)充的是,在創(chuàng)建那些需要觸發(fā)器更新的數(shù)據(jù)的時(shí)候,請(qǐng)不要設(shè)置not null,否則,由于在插入時(shí)會(huì)出錯(cuò)。因?yàn)樗谟|發(fā)器起作用之前為空。
由于本人水平有限,如有問題,請(qǐng)批評(píng)指正,謝謝
為了保持參照完整性,可以通過(guò)在對(duì)應(yīng)具有外鍵約束的字段后面增加ON DELETE CASCADE
具體參考這個(gè)
《在MySQL中利用外鍵實(shí)現(xiàn)級(jí)聯(lián)刪除!》
http://www.chinaunix.net/jh/17/462977.html