MySQL作业5

题目: 

内容: 

1.触发器

1.1建库建表

代码:

使用库:
use mydb16_trigger;

goods表:
create table goods(gid char(8) primary key , name varchar(10), price decimal(8,2), num int);

orders表:
create table orders(oid int primary key auto_increment, gid char(10) not null, name varchar(10), price decimal(8,2), onum int, otime date);

效果:

1.2插入数据

代码:

insert into goods values
    -> ('A0001', '橡皮', 2.5, 100),
    -> ('B0001', '小楷本', 2.8, 210),
    -> ('C0001', '铅笔', 1.2, 120),
    -> ('D0001', '计算器', 28, 20);

 select * from goods;

效果:

1.3建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量,并测试

代码:

create trigger orders_insert_trigger after insert on
    -> orders for each row update goods
    -> set num=num-new.onum
    -> where gid=new.gid;

insert into orders(gid,name,price,onum,otime) value('A0001','橡 皮',2.5,30,now());

select * from orders;

select * from goods;

效果:

1.4建立触发器,实现功能:客户取消订单,恢复商品表对应商品的数量

代码:

create trigger orders_delete_trigger after delete on orders
    -> for each row update goods
    -> set num=num+old.onum
    -> where gid=old.gid;

delete from orders where gid='A0001';

select * from orders;

select * from goods;

效果:

1.5建立触发器,实现功能:客户修改订单,商品表对应商品数量同步更新

代码:

create trigger orders_update_trigger after update
    -> on orders for each row update goods
    -> set num=num+(old.onum-new.onum)
    -> where gid=old.gid;

insert into orders(gid,name,price,onum,otime) value('A0001','橡 皮',2.5,30,now());

update orders set onum=40 where gid='A0001';

select * from orders;

select * from goods;

效果:

2.存储过程

2.1创建提取emp_new表所有员工姓名和工资的存储过程s1

代码:

delimiter //

create procedure s1()
    -> begin
    ->     select name,incoming from emp_new;
    -> end //

delimiter ;

call s1();

效果:

2.2创建存储过程s2,实现输入员工姓名后返回员工的年龄

代码:

delimiter //

create procedure s2(in in_name varchar(5),out out_age int)
    -> begin
    ->      select age into out_age from emp_new where name=in_name;
    -> end //

delimiter ;

call s2('牛八',@out_age);

select @out_age;

效果:

2.3创建一个存储过程s3,有2个参数,传入部门号,返回该部门的平均工资

代码:

delimiter //

create procedure s3(in in_dept int, out out_incoming int)
    -> begin
    ->     select avg(incoming) into out_incoming from emp_new where dept2=in_dept;
    -> end //

delimiter ;

call s3(102,@out_incoming);

select @out_incoming;

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值