mysql触发器

mysql 触发器

前言

这里呢,有两张表,分别是 CXY_TS_ORDER_TICKETCXY_TS_ORDER_TICKET_STATUS 表,在 CXY_TS_ORDER_TICKET 表里面有一个get_status字段,现在呢,我们想在该字段发生变化时,在CXY_TS_ORDER_TICKET_STATUS` 表中,将该字段插入,并且记录变化时间以及发生变化的记录的主键。因此呢,我打算用触发器去实现这个需求

实现

-- Created by util.you.com@gmail.com
delimiter $$
CREATE TRIGGER `order_ticket_status_trigger` AFTER UPDATE 
ON `CXY_TS_ORDER_TICKET` FOR EACH ROW 
BEGIN 
    DECLARE s1 INT(11); -- 声明变量,用于存入 CXY_TS_ORDER_TICKET 表的 get_status 字段值,id 字段值
    DECLARE s2 INT(11); 
    set s2 = new.id; -- 分别给 s1 和 s2 赋值
    set s1 = new.get_status;
    IF((old.get_status != new.get_status) OR (old.get_status IS NULL && new.get_status IS NOT NULL)) THEN
        INSERT INTO `CXY_TS_ORDER_TICKET_STATUS`(`order_ticket_id`, `STATUS`, `insert_date_time`) VALUES(s2, s1, DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s'));
    END IF; 
END$$

解释

在 mysql 中,newold都是内置的,分别表示一个字段发生变化前、后的值(当然也包括插入操作前后的变化),此处呢,因为我们需要根据 CXY_TS_ORDER_TICKET表的 get_status字段来插入记录到 CXY_TS_ORDER_TICKET_STATUS 表,因此呢,new 和 old 都取该字段即可。

mysql 中的触发器呢,大致分为三类:insert 型、update 型、delete 型。

何时触发该操作呢,又分为 afterbefore

上示例子,就是一个触发器的大致模板,根据哪一张表的变化来触发该触发器,就 on 这张表即可了。


   转载规则


《mysql触发器》 拉丁小毛 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录