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 ;
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 REFER