Mysql触发器实例

CREATE DATABASE triger;
 
   CREATE TABLE g(
   id INT(20) PRIMARY KEY   AUTO_INCREMENT,
   NAME VARCHAR(4),
   num INT
)

  CREATE TABLE o(
    oid INT PRIMARY KEY  AUTO_INCREMENT ,
    gid INT REFERENCES g(id),
    much INT
)

#向订单表中插入数据
INSERT  INTO g VALUES (1,'猪',22),(2,'羊',19),(3,'狗',12),(4,'猫',8);

SELECT * FROM g;

#买了三只羊
INSERT INTO o VALUES (NULL,2,5);
 

SELECT * FROM o

#减少羊的库存
UPDATE g SET num=num-3 WHERE id=2

#监视地点:0表
#监视操作:insert
#触发操作:update
#触发时间:after


#创建触发器语法
# create trigger triggerName before/after insert/update/delete on 表名  For each row #固定写法 Begin Sql语句 (sql语句可以依据或者多句) End;

#delimiter $ 将$符作为结束标志
-- 定义触发器(订单添加)
-- 第一步:改变sql结束标志为$$
DROP  TRIGGER tg1;
-- 第二步:编写trigger
DELIMITER $$ 
CREATE TRIGGER tg1 
  AFTER INSERT ON o 
  FOR EACH ROW 
  BEGIN                                            #对于insert来说
    UPDATE g SET num=num-new.much WHERE id=new.gid; #因为这里可能放的是多条语句,所以使用;
  END$$
-- 第三步,还原sql结束标志
DELIMITER ;



-- 定义触发器(订单删除)
-- 第一步:改变sql结束标志为$$
DELIMITER $$
-- 第二步:编写trigger
CREATE TRIGGER tr2
AFTER DELETE ON o
 FOR EACH ROW
 BEGIN	
  UPDATE g SET num=num+old.much WHERE id=old.oid;
 END$$
 -- 第三部,还原sql结束标志
 DELIMITER ;





-- 定义触发器(订单修改)
-- 第一步:改变sql结束标志为$$
DELIMITER $$
-- 第二步:编写trigger
CREATE TRIGGER tr3
AFTER UPDATE ON o
FOR EACH ROW
BEGIN
	UPDATE g SET num=num+old.much WHERE id=old.oid;-- 删除旧订单
	UPDATE g SET num=num-new.much WHERE id=new.oid;-- 添加新订单
END$$
-- 第三步,还原sql结束标志
DELIMITER ;



-- 定义触发器(限制买5个)。  直接新建触发器。右击新建
DELIMITER $$

CREATE
    /*[DEFINER = { user | CURRENT_USER }]*/
    TRIGGER `triger`.`tr4` BEFORE INSERT 
    ON `triger`.`o`
    FOR EACH ROW 
    BEGIN
     IF new.much>5 THEN SET new.much=5;
     END IF;        
    END$$
-- 还原sql结束标志
DELIMITER ;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值