借书案例
数据准备


- 通过存储过程,实现借书操作:那个学生借的书,借了几本书
- 操作
- 保存借书记录
- 修改图书库存
- 条件
- 判断学生是否存在
- 判断图书是否存在,库存是否充足
- 创建借书记录表(当数据关系是多对多的时候,最后是创建另一张表)
![]()
创建存储过程
-- a:输入参数 学号
-- b:输入参数 图书编号
-- m:输入参数 借书数量
-- state: 输出参数 借书状态(1:借书成功 2:学号不存在 3:图书不存在 4:库存不足)
create PROCEDURE porc_borrow_book(IN a char(4), IN b int, IN m int, OUT state int)
BEGIN
-- 1.判断学生是否存在:根据a在学生表中查询学生表是否存在
DECLARE stucount int;
DECLARE bookcount int;
DECLARE stock int DEFAULT 0;
SELECT count(stunum) into stucount from students where stunum=a;-- 利用函数count对stunum字段计数,把结果传给stucount
if stucount > 0 then
-- 学号存在
-- 判断图书是否存在
select count(bookid) into bookcount from books where bookid = b;
if bookcount > 0 then
-- 图书存在
-- 图书库存是否存在,与所借的数量进行比较
SELECT bookstock into stock from books where bookid = b;
if stock >= m THEN
-- 执行借书
INSERT into records(snum,bid,borrownum,isreturn,borrowdate) VALUES(a,b,m,0,SYSDATE());-- SYSDATE()获取系统时间
-- 修改图书库存
UPDATE books set bookstock = stock - m where bookid = b;
-- 借书成功
set state = 1;
ELSE
-- 库存不足
set state = 4;
end if;
ELSE
-- 图书不存在
set state = 3;
end if;
ELSE
-- 不存在
set state = 2;
end if;
END;
测试1 学生不存在

测试2 借的书数量太多

测试3 借书成功

查看records表,查看借书的对应关系

查看books表,查看图书剩余数量



浙公网安备 33010602011771号