--
--
-- 建立两个表:Goods(商品表)、Orders(订单表)
--
-- Goods(商品表)
-- create table Goods
-- (
-- gid char(8) not null primary key, #商品编号
-- name varchar(10), #商品名
-- price decimal(8,2), #价格
-- num int #数量
-- );
--
-- create table Orders
-- (
-- oid int not null primary key auto_increment, #订单号
-- gid char(10) not null, #商品号
-- name varchar(10), #商品名
-- price decimal(8,2), #价格
-- onum int , #订单数量
-- otime date #订单时间
-- );
--
-- 在商品表中导入商品
-- insert into Goods values
-- ('A0001', '橡皮', 2.5, 100),
-- ('B0001','小楷本', 2.8, 210),
-- ('C0001','铅笔', 1.2, 120),
-- ('D0001','计算器',28, 20);
--
-- 1、建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量
DELIMITER //
CREATE TRIGGER TRIGGER1
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN
UPDATE Goods
SET num = num - NEW.onum
WHERE gid = NEW.gid;
END //
DELIMITER ;
-- 2、建立触发器,实现功能:客户取消订单,恢复商品表对应商品的数量
DELIMITER //
CREATE TRIGGER TRIGGER1
AFTER delete ON Orders
FOR EACH ROW
BEGIN
UPDATE Goods
SET num = num + old.onum
WHERE gid = old.gid;
END //
delimiter ;
-- 3、建立触发器,实现功能:客户修改订单,商品表对应商品数量同步更新
DELIMITER //
CREATE TRIGGER update
AFTER update ON Orders
FOR EACH ROW
BEGIN
UPDATE Goods
SET num = num + old.onum - NEW.onum
WHERE gid = old.gid;
END //
delimiter ;
-- 4、建立触发器,实现功能:对于所下订单,进行判断,如果订单的数量>库存数量,就认为是恶意订单,把订单数量变为库存最大数量。
delimiter //
CREATE TRIGGER INSERT
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
if(SELECT num FROM goods WHERE gid=new.gid) < NEW.num then
UPDATE Goods
SET num = num - NEW.onum
WHERE gid = old.gid;
else
UPDATE orders
SET onum = num WHERE gid = goods.gid
WHERE gid = old.gid;
UPDATE Goods
SET num = 0
WHERE gid = old.gid;
END if;
delimiter ;
mysql第七天
于 2024-07-13 09:57:13 首次发布