MySQL觸發器 trigger學習,mysql觸發器trigger

來源:互聯網
上載者:User

MySQL觸發器 trigger學習,mysql觸發器trigger
觸發器:一類特殊的事物,可監視某種資料操作,並觸發相關操作(insert/update/delete);表中的某些資料改變,希望同時可以引起其它相關資料改變的需求。作用:變化自動完成某些語句查詢,添加程式的靈活性。建立觸發器文法:#delimiter $$  //預設情況下,delimiter是分號“;”,sql語句帶有;號結尾會報錯,沒到end就算到結束了,使用delimiter $$作用就是告訴mysql語句的結尾換成以$結束,相應使用end$$結束

create trigger test1  #觸發器名稱(after/before) #觸發時間(insert/update/delete)  #監視事件on table #監視地點(表名)for each row  #mysql必須加的 begin    sql1    ...    sqlNend;#end$$
查詢已有trigger:show triggers刪除已有trigger:drop trigger 觸發器名稱new/old:update觸發:old 代表更新前的記錄。new 代表更新後的記錄.insert觸發:old 不能使用。new 代表插入的記錄.delete觸發:old 代表刪除的記錄。new 不能使用.
執行個體操作:goods商品表和ord訂單表
CREATE TABLE goods(`goods_id` INT(10),`name` VARCHAR(20),`num` SMALLINT(4))ENGINE=INNODB CHARSET=utf8CREATE TABLE `ord`(`oid` INT(10),`gid` INT(10),`much` INT(10))ENGINE=INNODB CHARSET=utf8INSERT INTO goods VALUES(1, 'cat', 26),(2, 'dog', 26),(3, 'pig', 26);
1、要求每下一個訂單,goods表中的庫存相應減少訂單的數量。mysql> select * from goods+----------+------+------+| goods_id | name | num |+----------+------+------+| 1 | cat | 26 || 2 | dog | 26 || 3 | pig | 26 |+----------+------+------+3 rows in set (0.00 sec)mysql> select * from ord;Empty set (0.00 sec)
#建立觸發器test1DELIMITER $$CREATE TRIGGER test1AFTERINSERTON `ord`FOR EACH ROWBEGINUPDATE goods SET num= num - new.much WHERE goods_id = new.gid;END$$

mysql> CREATE TRIGGER test1    -> AFTER    -> INSERT    -> ON `ord`    -> FOR EACH ROW    -> BEGIN    -> UPDATE goods SET num= num - new.much WHERE goods_id = new.gid;    -> END$$Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO `ord` VALUES (1, 2, 2)$$Query OK, 1 row affected (0.03 sec)mysql> select * from ord$$+------+------+------+| oid | gid | much |+------+------+------+| 1 | 2 | 2 |+------+------+------+1 row in set (0.00 sec)mysql> select * from goods$$+----------+------+------+| goods_id | name | num |+----------+------+------+| 1 | cat | 26 || 2 | dog | 24 || 3 | pig | 26 |+----------+------+------+3 rows in set (0.00 sec)goods表裡面的dog由26變成24
2、使用者取消訂單後商品庫存訂單的商品數要正常入庫。以下唯寫觸發器trigger,操作過程不寫太多比較亂。
#觸發器test2CREATE TRIGGER test2AFTERDELETEON `ord`FOR EACH ROWBEGINUPDATE goods SET num = num + old.much WHERE goods_id = old.gid;END $$ 

3、使用者更新訂單的時候,商品庫存要根據訂單的數量正常更新。
#觸發器test3CREATE TRIGGER test3AFTERUPDATEON `ord`FOR EACH ROWBEGINUPDATE goods SET num = num + old.much - new.much WHERE goods_id = new.gid;END$$


查詢觸發器
刪除觸發器



怎在mysql中運行觸發器(trigger)?

觸發器,不是調用的,是觸發的。
你的觸發器是針對password表的,在執行修改後觸發。
那你就修改password表的資料列price就可以了。
 
MYSQL 觸發器文法的一個問題

在命令列下沒有用分隔字元delimiter 是建立不了觸發器的。
delimiter $create trigger insertAfterDeleteafter t_order on insertfor each rowbeginupdate goods set goods_count = goods_count - new.order_count where goods_id = new.goods_id;end;$www.cnblogs.com/...3.html

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.