MySQL数据库练习(5)

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

结果如下:

2.插入数据

复制代码
# 插入数据
insert into goods values
('A0001','橡皮',2.5,100),
('B0001','小楷本',2.8,210),
('C0001','铅笔',1.2,120),
('D0001','计算器',28,20);

结果如下:

3.要求

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

复制代码
# 建立触发器
create trigger orders_after_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('C0001','铅笔',1.2,80,now());

结果如下:

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

复制代码
# 建立触发器
create trigger orders_after_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 = 'C0001';

结果如下:

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

复制代码
# 建立触发器新
create trigger orders_after_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,20,now());


# 用户修改数量
update orders set onum=35 where gid='A0001';

结果如下:

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

复制代码
# 切换数据库
use mydb7_openlab;


# 创建存储过程s1
delimiter //
create procedure s1()
begin
    select name,incoming from emp_new;
end //

delimiter ;

# 调用
call s1();

结果如下:

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

复制代码
# 查表结构获取变量类型
desc emp_new;

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

# 调用
select * from emp_new;

# 查看数据
call s2("王五",@age);
select @age;

结果如下:

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

复制代码
delimiter //
create procedure s3(in in_dept int,out avg_sal float)
begin
    # 不需要分组,除非是求每个部门的平均工资
    select avg(incoming) into avg_sal from emp_new where dept2=in_dept;
end //
delimiter ;


# 调用
call s3(101,@avg_sal);

结果如下:

相关推荐
小冯不疯3 分钟前
销售订单同步实战:从聚水潭到金蝶云星空的线上出库单落地
大数据·数据库
qq_4017004114 分钟前
Qt 实时大数据量存储:自己动手实现 TDMS 读写
数据库·qt
Leon-Ning Liu26 分钟前
Oracle参数对比脚本分享:对比 SPFILE 参数与内存参数差异,支持 11g 到 19c
数据库·oracle
涛思数据(TDengine)36 分钟前
TDengine TSDB 3.4.3.3 上线:流计算分层闭环、虚拟表跨层引用,查询关联一次写完
数据库·人工智能·数据分析·时序数据库·tdengine·工业
远方160938 分钟前
118-五大进程LGWR DBWn CKPT SMON PMON 与存储故障-文件系统对照
大数据·数据库·sql·oracle·database
ss27340 分钟前
AI时代首先数据库-PostgreSQL实战笔记 | 17 PostgreSQL SQL高级查询:窗口函数、CASE、COALESCE
数据库·笔记·postgresql
远方16091 小时前
119-Oracle CDB 下修改和重置 SYS SYSTEM密码记录
大数据·数据库·sql·oracle·database
橙光成长1 小时前
Context Mode 深度解析:用沙盒、SQLite 与钩子路由,把 AI 编码 Agent 的上下文消耗削减 98%
数据库·人工智能·sqlite
数据库小学妹1 小时前
MySQL时区问题排查:TIMESTAMP和DATETIME的区别与跨时区对账踩坑
数据库·mysql·datetime·时区·timestamp·跨时区对账
创世虚拟世界1 小时前
把 3D 虚拟世界拉到本地:vibe coding 的手感,是从看见自己那一行改动开始的
javascript·数据库·人工智能·3d·gitee·虚拟现实