本次作业基于Mac OS X系统下的mysql workbench软件完成
存储过程在数据库编程中也是一个重要的角色,其主要的能力在于能被编译好放到服务器中,在使用时直接call即可调用执行,既能简化操作又能节省时间,能在优化层面起到一个很好的作用。
实验内容
1、编写存储过程实现下列操作:
(1)查询某读者、某段时间的借阅信息。已知读者姓名,查询起始和终止时间,列出其所有借阅信息。
(2)实现简单的图书入库操作(包含主键的少量信息即可)
2、编写函数实现下列操作:
输入会员级别,返回该级别会员所借的图书总数量
解决方案
编写存储过程
(1)查询某读者、某段时间的借阅信息(已知读者姓名,查询起始和终止时间,列出其所有借阅信息
实现代码如下,其中 delimiter 是MySQL中的命令,这个命令与存储过程没什么关系,其作用就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。
1 | USE `bookmis`; |
我们用代码
1 | call borrow_book('r001','2016-01-01','2017-01-01') |
(2)实现简单的图书入库操作(包含主键的少量信息即可)
代码如下,插入的参数为 book_id , book_name 和 Quantity_in 三个
1 | DELIMITER $$ |
由于存储过中写到了if条件判断,所以我们分别测试一下插入新书和插入旧书的结果。
首先是插入新书,执行代码
1 | call entry('b009','test_book',12) |
1 | call entry('b001','并行计算',20) |
编写函数
(1)输入会员级别,返回该级别会员所借的图书总数量。
代码如下:
1 | DELIMITER $$ |
我们拿金卡用户做测试,可以观察到金卡用户 r001,r004:
r001,r004总共借阅了图书5本,分别是b001,b002,b001,b002,b006:
执行代码:
1 | select show_vipbooks('金卡') |
小结
存储过程和函数在课程设计和项目中都是一个比较重要的成分,其中很大一部分原因在于其代码的集成性。运用存储过程可以起到一个很好的简化代码的作用,只需一个入口参数即可实现重复的数据查询或数据定义的功能,比起繁琐的select语句,一个call起到的作用会更大,更何况其执行速度也得到了很好的优化。