關(guān)于MySQL的觸發(fā)器

MySQL操作


修改MySQL的結(jié)束符

有時(shí)候在使用一個(gè)特殊SQL的時(shí)候需要使用;,但是;MySQL中會(huì)被當(dāng)做結(jié)束符,這樣我們就需要臨時(shí)修改MySQL中的結(jié)束符。

delimiter $   ##他的含義就是使用$ 替換 ; 
舉個(gè)例子 :select * from user$    ##這樣就表示語(yǔ)句的結(jié)束。
delimiter ; ### 使用這個(gè)兩個(gè)語(yǔ)句包裹起來(lái) 這樣里面的;就不會(huì)當(dāng)做結(jié)束符。

MySQL的觸發(fā)器

觸發(fā)器(trigger):監(jiān)視某種情況,并觸發(fā)某種操作

觸發(fā)器創(chuàng)建語(yǔ)法四要素:

1.監(jiān)視地點(diǎn) (table)

2.監(jiān)視事件(insert,delete,update)

3.觸發(fā)時(shí)間(after,before)

4.觸發(fā)事件(insert,delete,update)

MySQL的觸發(fā)器例子。

 delimiter $
 create trigger update_client_after
 after update
  on client_grade
  for each row
  begin 
  if(old.gradeC!='n') then 
  update sku set c=12 where shopid=old.shopid;
   end if; 
   end$
   delimiter ;

以上就是創(chuàng)建一個(gè)簡(jiǎn)答的觸發(fā)器。update_client_after是觸發(fā)器的名字。after update指的是觸發(fā)時(shí)間,on client_grade指的是對(duì)這張表的監(jiān)聽。for each row是指每操作一行都會(huì)觸發(fā)。begin表示的是觸發(fā)后的操作。使用end結(jié)束。上面的例子包含了一個(gè)if判斷。

關(guān)于觸發(fā)時(shí)間afterbefore中的oldnew的使用。

after的意思是先完成數(shù)據(jù)的增刪改,然后再觸發(fā),觸發(fā)的語(yǔ)句晚于監(jiān)視的增刪改,無(wú)法影響前面的增刪改動(dòng)作。不能對(duì)new進(jìn)行操作。

before的意思是先觸發(fā)在進(jìn)行數(shù)據(jù)的增刪改。可以根據(jù)觸發(fā)后的結(jié)果完成數(shù)據(jù)操作。(insert、 update)可以對(duì)new操作。

都不能對(duì)old操作。

對(duì)于觸發(fā)器內(nèi)部操作的約束:對(duì)于insert操作,只有對(duì)new 是合法的,對(duì)于delete操作,只有對(duì)old操作是合法的,在update語(yǔ)句中可以同時(shí)操作newold。這個(gè)很容易理解咯。

MySQL的存儲(chǔ)過(guò)程

delimiter $
create procedure updateds(IN shopid int) 
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a INT;
DECLARE ids INT;
DECLARE cur CURSOR FOR SELECT id,b FROM sku WHERE shopid=shopid;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cur;
REPEAT -- 循環(huán)
    FETCH cur INTO ids,a;
    IF NOT done THEN
   update sku set c=a where id=ids; 
END IF;
UNTIL done END REPEAT;-- 結(jié)束循環(huán)
CLOSE cur;-- 這個(gè)語(yǔ)句關(guān)閉先前打開的光標(biāo)。
END$
delimiter ;

存儲(chǔ)過(guò)程的例子。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,706評(píng)論 18 399
  • 觸發(fā)器 MySQL包含對(duì)觸發(fā)器的支持。觸發(fā)器是一種與表操作有關(guān)的數(shù)據(jù)庫(kù)對(duì)象,當(dāng)觸發(fā)器所在表上出現(xiàn)指定事件時(shí),將調(diào)用...
    FTOLsXD閱讀 1,046評(píng)論 0 1
  • 概述 觸發(fā)器,顧名思義就是當(dāng)某個(gè)事情(事件)發(fā)生時(shí)候,執(zhí)行某一段程序。觸發(fā)器有四大要素:監(jiān)視地點(diǎn)(table_na...
    林灣村龍貓閱讀 1,142評(píng)論 0 3
  • 養(yǎng)身,顧名思義,保養(yǎng)身體。我相信一個(gè)身材不好的人保準(zhǔn)百病纏身。比如三高,心腦血管病,等等 養(yǎng)生,瘦下來(lái)除百病。 那...
    占心為王閱讀 180評(píng)論 0 0
  • ——省培陜師大跟崗實(shí)踐札記 三門峽市參訓(xùn)學(xué)員 2016.10.18 First day 一.與君初相識(shí) 二.等候指...
    品心靜氣閱讀 785評(píng)論 0 0

友情鏈接更多精彩內(nèi)容