#数据库系统与应用 实验1 Report
PB15121708 方林涛
目录
实验题目
实验环境
实验内容以及结果:
建表
插入测试数据
查询测试
存储过程
触发器
实验题目
设某图书馆数据库包含下面的基本表:
Book(ID: char(8),name:varchar2(10),author:varchar2(10),price:float, status: int)
图书号 ID 为主键,书名不能为空。状态(status)为 1 表示书被借出,0 表示在馆,
默认值为 0。
Reader(ID:char(8),name:varchar2(10),age:int,address:varchar2(20)) 读者号 ID
为主键。
Borrow(book_ID:char(8),Reader_ID:char(8),Brrrow_Date:date, Return_Date:date)
其中:还期 Return_Date 为 NULL 表示该书未还。主键为(图书号,读者号),图
书号为外键,引用图书表的图书号,读者号为外键,引用读者表的读者号
1、 创建上述基本表,并插入部分测试数据;
2、 设计例子,验证实体完整性、参照完整性、用户自定义完整性;
3、 用 SQL 语言完成下面小题,并测试运行结果:
4、 设计存储过程,实现对 Book 表的 ID 的修改。
5、 设计触发器,实现:当一本书被借出时,自动将 Book 表中相 应图书的 status 修改为1;当某本书被归还时,自动将 status 改为 0。
实验环境
Mysql 5.7.20
MacOSX
建表
1.1
1.2
1.3
插入测试数据
查询测试
1.
1 | select id,address from reader where name = 'Rose'; |
2.
1 | select book.name,datediff(return_date,borror_date) as Days |
3.
1 | mysql> select reader.name from reader |
4.
1 | select name,price from book where author = 'Ullman'; |
5.
1 | select book.id,book.name |
6.
1 | select reader.name |
7.
1 | select reader.name,reader.id |
8.
1 | select name,id from book where name like '%Oracle%'; |
9.
1 | select reader_id,count(*) from borrow_view V |
存储过程
1 | DELIMITER $ |
测试
call modify_bookid('0','9')$
触发器
CREATE PROCEDURE 存储过程名称(
IN/OUT 参数 数据类型 ...)
BEGIN
END
create procedure modify_bookid(
in old_id char, in new_id char)
begin
set foreign_key_checks = 0;
update book set id = new_id where id = old_id;
update borrow set book_id = new_id where book_id = old_id;
set foreign_key_checks = 1;
end$
create trigger borrow_insert after insert on borrow for each row
begin
if datediff(curdate(),new.return_date)>=0 then
update book set status = 0 where id = new.book_id;
else
update book set status = 1 where id = new.book_id;
end if;
end$
插入测试数据前book,borrow表
插入测试数据后borrow,book表
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rat_racer@qq.com