Oracle使用觸發(fā)器和mysql中使用觸發(fā)器的案例比較

Mysql關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)

mysql是一個(gè)開(kāi)放源碼的小型關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典mysql ab公司。mysql被廣泛地應(yīng)用在internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了mysql作為網(wǎng)站數(shù)據(jù)庫(kù)。

這篇文章主要介紹了Oracle使用觸發(fā)器和mysql中使用觸發(fā)器的案例比較,本文通過(guò)示例講解,給大家介紹的非常詳細(xì),需要的朋友參考下

一、觸發(fā)器

  1.觸發(fā)器在數(shù)據(jù)庫(kù)里以獨(dú)立的對(duì)象存儲(chǔ),

  2.觸發(fā)器不需要調(diào)用,它由一個(gè)事件來(lái)觸發(fā)運(yùn)行

  3.觸發(fā)器不能接收參數(shù)

  –觸發(fā)器的應(yīng)用

    舉個(gè)例子:校內(nèi)網(wǎng)、開(kāi)心網(wǎng)、facebook,當(dāng)你發(fā)一個(gè)日志,自動(dòng)通知好友,其實(shí)就是在增加日志的時(shí)候做一個(gè)出發(fā),再向表中寫(xiě)入條目。

  –觸發(fā)器的效率很高

    舉例:論壇的發(fā)帖,每插入一個(gè)帖子都希望將版面表中的最后發(fā)帖時(shí)間,帖子總數(shù)字段進(jìn)行同步更新,這時(shí)使用觸發(fā)器效率會(huì)很高。

二、Oracle 使用 PL/SQL 編寫(xiě)觸發(fā)器

1.–PL/SQL創(chuàng)建觸發(fā)器的一般語(yǔ)法

create?[or?replace]?trigger?trigger_name  {before?|?after}  {insert?|?delete?|?update?[of?column[,column?...?]]}?on?table_name  [for?each?row]  [where?condition]  --trigger_body;  begin?  end;

2.–練習(xí)

--問(wèn)題3.使用:old?和?:new?操作符  create?or?replace?trigger?tri_update  after  update?on?employees  for?each?row?  begin    dbms_output.put_line('更新前:'||:old.salary||'?更新后:'||:new.salary);  end;  --問(wèn)題2.編寫(xiě)一個(gè)觸發(fā)器,在向?emp?表中插入記錄時(shí)?打印'hello'  create?or?replace?trigger?tri_update  after  insert?on?emp  begin    dbms_output.put_line('ok');  end;  --問(wèn)題1.一個(gè)helloworld級(jí)別的觸發(fā)器  --創(chuàng)建一個(gè)觸發(fā)器,在更新employees表的時(shí)候觸發(fā)  create?or?replace?trigger?tri_update  after  update?on?employees  for?each?row?--想在最后執(zhí)行完打印一個(gè)ok,把這句話去掉  begin    dbms_output.put_line('ok');  end;  --執(zhí)行  update?employees  set?salary?=?salary+1  where?department_id?=?80

三、在MySql 使用觸發(fā)器

--假設(shè)有兩張表?board?和?article  create?table?board(    id?int?primary?key?auto_increment,    name?varchar(50),    articleCount?int  );  create?table?article(    id?int?primary?key?auto_increment,    title?varchar(50),    bid?int?references?board(id)  );  --創(chuàng)建一個(gè)觸發(fā)器  delimiter?$$  create?trigger?insertArticle_trigger?  after?insert?on?article?  for?each?row  begin    update?board?set?articleCount=articleCount+1  where?id?=?new.bid;  end;  $$  delimiter?;  --當(dāng)我們對(duì)article表執(zhí)行插入操作的是后就會(huì)觸發(fā)這個(gè)觸發(fā)器  insert?into?board?values(null,'test_boardname',0);  insert?into?article?values(null,'test_title',1);  --執(zhí)行完這條插入語(yǔ)句后,board表中的articleCount字段值回+1;這個(gè)操作由觸發(fā)器完成。

以上就是Oracle使用觸發(fā)器和mysql中使用觸發(fā)器的案例比較的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊11 分享