数据库原理综合实验综合实验一、创建图书管理库(BookSys)该数据库的主数据文件逻辑名称为:“图书管理库”,物理文件名为:图书管理库.Mdf,物理文件路径为D:\,初始大小为3MB,最大容量为100MB,增长速度为10%;数据库的日志文件逻辑名称为“图书管理库_log”,物理文件名为:图书管理库_log.ldf,物理文件路径为D:\,初始大小为1MB,最大容量为2MB,增长速度为10%)CREATE DATABASE图书管理库ON PRIMARY(NAME='图书管理库',FILENAME='D:\图书管理库.mdf',SIZE= 3MB,MAXSIZE= 100MB,FILEGROWTH= 10%)LOG ON(NAME='图书管理库_log',FILENAME='D:\图书管理库_log.ldf',SIZE= 1MB,MAXSIZE= 2MB,FILEGROWTH= 10%)二、在图书管理库(BookSys)中建立如下的表:1、图书信息表(tsxx)CREATE TABLE图书信息(图书编号char(8)PRIMARY KEY NOT NULL,图书名称char(20)UNIQUE NOT NULL,价格money NOT NULL,出版社char (20),出版时间datetime null,作者char(8),)并插入如下数据:insert into图书信息values(1,'高等数学',20,'高等教育出版社','2001-1-5','李青')insert into图书信息values(2,'C语言程序设计',30,'高等教育出版社','2004-1-5','唐浩强') insert into图书信息values(3,'SQL server原理',28,'中国水利出版社','2008-1-5','李青') insert into图书信息values(4,'数据结构',37,'中国水利出版社','2011-1-5','李青')insert into图书信息values(5,'操作系统',29,'中国水利出版社','2009-1-5','刘红')insert into图书信息values(6,'离散数学',18,'清华大学出版社','2006-1-5','唐浩强')insert into图书信息values(7,'微机原理',45,'清华大学出版社','2007-1-5','林林')CREATE TABLE读者信息(读者编号char(8)PRIMARY KEY NOT NULL, 姓名char(20)UNIQUE NOT NULL,身份证号char(18),级别char (8),)并插入如下数据:insert into读者信息values(1,'张三','350322************',1) insert into读者信息values(2,'李子','350322************',1) insert into读者信息values(3,'王五','350322************',2) insert into读者信息values(4,'赵三','350322************',3) insert into读者信息values(5,'林刘','350322************',2) insert into读者信息values(6,'陈东','350322************',3) insert into读者信息values(7,'郑一','350322************',1)3、借阅信息(jyxx)CREATE TABLE借阅信息(读者编号char(8)NOT NULL,图书编号char(8)NOT NULL,借阅日期datetime,还书日期datetime,是否续借char(4),PRIMARY KEY(读者编号,图书编号),FOREIGN KEY (读者编号)REFERENCES读者信息(读者编号), FOREIGN KEY (图书编号)REFERENCES图书信息(图书编号), ) 并插入如下数据:insert into借阅信息values(1,3,'2010-12-2','2011-12-1','可以') insert into借阅信息values(1,4,'2010-12-2','2011-12-1','可以') insert into借阅信息values(2,3,'2011-2-2','2011-10-1','可以') insert into借阅信息values(5,7,'2011-2-2','2011-9-1','可以') insert into借阅信息values(7,3,'2011-1-2','2011-2-1','可以') insert into借阅信息values(4,2,'2010-12-20','2011-12-1','可以') values(4,1,'2011-1-12','2011-2-1','可以')三、完成如下操作:1、修改列“出版社”的定义,长度修改成30 ALTER TABLE图书信息ALTER COLUMN出版社CHAR(30)2、修改读者信息表中编号为1的读者的级别为2级UPDATE读者信息SET级别= 2WHERE读者编号= 1四、完成如下查询语句:1、查询图书馆中所有的图书、出版社、读者信息SELECT图书名称,出版社FROM图书信息SELECT读者信息.*FROM读者信息2、查询前3项读者借阅图书的信息SELECT TOP 3 *FROM借阅信息3、查询前3%项读者借阅图书的信息SELECT TOP 3PERCENT*FROM借阅信息4、查询所有借书的读者编号,要求取消重复行SELECT DISTINCT读者编号FROM借阅信息5、查询图书价格打8折后的图书名称、原价和折后价格,分别以“图书名称”、“原价”、“折后价格”为列名显示SELECT图书名称,价格原价,价格*0.8 折后价格FROM图书信息6、查询价格大于等于20元的图书信息SELECT*FROM图书信息WHERE价格>207、查询价格在20~40元之间的图书信息SELECT*FROM图书信息WHERE价格BETWEEN 20 AND 408、查询由“中国水利出版社”、“高等教育出版社”、“清华大学出版社”出版的所有图书SELECT*FROM图书信息WHERE出版社IN('中国水利出版社','高等教育出版社','清华大学出版社')9、查询姓“张”的读者的信息SELECT*FROM读者信息WHERE姓名like'张%'10、计算图书馆图书的总价格、平均价格SELECT SUM(价格)总价格,AVG(价格)平均价格FROM图书信息11、计算机出自“中国水利出版社”的图书数量SELECT COUNT(图书编号)图书数量FROM图书信息WHERE出版社='中国水利出版社'12、按读者级别由高到低输出读者信息SELECT*FROM读者信息ORDER BY级别DESC13、查询图书价格大于图书平均价格的所有图书信息SELECT*FROM图书信息WHERE价格>(SELECT AVG(价格)FROM图书信息)14、查询“李青”曾出版过书的出版社还出版了哪些书SELECT图书名称,出版社FROM图书信息WHERE作者='李青'15、查询价格大于“中国水利出版社”出版的任意书的价格的图书信息SELECT*FROM图书信息WHERE价格>(SELECT MAX(价格)FROM图书信息WHERE出版社='中国水利出版社')五、其他操作1、建立视图显示读者借书的信息(包括读者姓名、借书名、借书日期)CREATE VIEW读者借书ASSELECT姓名,图书名称借书名,借阅日期借书日期FROM图书信息,借阅信息,读者信息WHERE读者信息.读者编号=借阅信息.读者编号AND借阅信息.图书编号=图书信息.图书编号2、建立存储过程,根据用户输入的读者编号来查看此读者的借阅信息CREATE PROC编号借阅信息@读者编号char(8)ASSELECT读者借书.*FROM读者借书,读者信息WHERE读者编号=@读者编号AND读者信息.姓名=读者借书.姓名EXEC编号借阅信息 13、建立关于借阅表的触发器,当由用户借书时,向借阅表插入借书信息,并打印“借阅成功”CREATE TRIGGER用户借书ON借阅信息AFTER INSERTASPRINT'借阅成功'insert into借阅信息values(4,3,'2010-12-2','2011-12-1','可以')4、建立INSTEAD OF触发器,当向借阅表插入借阅记录时,先检查读者信息是否存在该读者,如果存在则执行插入操作,如果不存在这提示“没有此读者!”CREATE TRIGGER插入借阅ON借阅信息INSTEAD OF INSERTASBEGINDECLARE@读者编号char(8),@图书编号char(8),@借阅日期datetime,@还书日期datetime,@是否续借char(4)SELECT@读者编号=读者编号,@图书编号=图书编号,@借阅日期=借阅日期,@还书日期=还书日期,@是否续借=是否续借FROM insertedIF NOT EXISTS(SELECT*FROM读者信息WHERE@读者编号=读者编号)PRINT'没有此读者!'ELSEINSERT INTO借阅信息VALUES (@读者编号,@图书编号,@借阅日期,@还书日期,@是否续借)ENDinsert into借阅信息values(10,3,'2010-12-2','2011-12-1','可以')insert into借阅信息values(7,4,'2010-12-2','2011-12-1','可以')5、在读者信息表和借阅信息表之间具有逻辑上的主外键关系,要求当删除或更新读者记录的时候,要激发触发器tri_Delete,在借阅信息表中也删除或更新相对应的记录行。