mysql的觸發器編寫(一)


  mysql語句初級入門以後,須要的是對mysql更精深的一步操做。觸發器是mysql裏相對比較高級的一個操做。處理器最典型的應用是事物:(Innodb會支持事物功能)TP框架裏經常會用到事物回滾等概念。觸發器能夠實現事物的功能,好比某個會員退款成功後,交易成功狀態變動,同時會變動統計數據還有用戶帳戶金額等。
  觸發器的基本語法:
    create trigger triggerName
    after/before insert/update/delete on 表名
    for each row   #這句話在mysql是固定的
    begin
    sql語句;
    end;   
   在很是多的業務邏輯中,須要
   新設計倆個表
   test1     id  num1  num2  三個字段
   test2     id  num3    score  三個字段mysql


   1.最簡單的觸發器設計示例
   每當test1表新增一個數據組的時候的時候,test2跟新一個對應的隨機數據組  
   CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `test`.`testxiong` AFTER INSERT ON `test`.`test1`
  FOR EACH ROW Insert into test2(`score`,`num3`) values(ROUND(RAND() * 99),ROUND(RAND() * 99));
  對於insert而言,新插入的行用new來表示,行中的每一列的值用new.列名來表示。sql


 2.如今實現一個功能:
    咱們用num3 儲存生成一個隨機數 score備份num1的值 進行對應的id儲存
    對於insert而言,新插入的行用new來表示,行中的每一列的值用new.列名來表示。
    Insert into test2(`id`,`score`,`num3`) values(new.id,new.num1,ROUND(RAND() * 99));框架


  3.關聯觸發器刪除操做,天天test1表進行數據刪除操做的時候,把test2表對應的id進行刪除
  CREATE TRIGGER `test`.`deletexiong` AFTER DELETE ON `test`.`test1`
  FOR EACH ROW delete from test2 where test2.id=old.id;
  對於delete而言:本來有一行,後來被刪除,想引用被刪除的這一行,用old來表示,old.列名能夠引用被刪除的行的值。設計


  4.數據表更新觸發
  實現目標:當test1表的Id=8的num2進行更新後,test2表Id=8的score會讀取test1表更新數據加上本身表裏原來的score
  update test2  set  score=new.num1  where Id = old.Id;
 對於update而言:被修改的行,修改前的數據,用old來表示,old.列名引用被修改以前行中的值;
修改的後的數據,用new來表示,new.列名引用被修改以後行中的值。io

相關文章
相關標籤/搜索