借书案例

数据准备


  • 通过存储过程,实现借书操作:那个学生借的书,借了几本书
  • 操作
    • 保存借书记录
    • 修改图书库存
  • 条件
    • 判断学生是否存在
    • 判断图书是否存在,库存是否充足
  • 创建借书记录表(当数据关系是多对多的时候,最后是创建另一张表)

创建存储过程

-- 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表,查看图书剩余数量

posted @ 2023-02-24 20:02  BattleTrumpet  阅读(39)  评论(0)    收藏  举报