数据库原理课程设计报告报告实验创建存储过程与触发器_计算机-数据库.pdf
.word.zl.存储过程与触发器 实验日期和时间:2021 年 5 月 13 日、星期 五 第 节 实验室:DJ2-信息管理实验室 班级:学号:实验环境:1.硬件:笔记本电脑 2.软件:SQL Server 2021 实验原理:存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的 T-SQL命令集合,这些命令用来完成对数据库的指定操作。存储过程可以承受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言DDL 和数据操作语言DML语句,然后返回输入参数。触发器概念:触发器trigger是 SQL server 提供应程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比方当对一个表进展操作 insert,delete,update时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规那么等。实验任务:此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给教师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给教师或在报告中明确标注题意。假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。以以下出参考的库表情况:根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:打号的是必须有的表 1.图书现有库存表。作用:记录图书的现有库存情况。至少包括:书号、书名、作者、简介、类别、价格、出版日期、现有库存数量、最小库存量、库存总量、库存位置等。2.读者信息表。作用:记录读者信息。至少包括:读者编号、证件类型、证件、性别、职业可填写教师、学生、教工、其它、所属单位、地址、联系等。3.借书记录表。作用:记录借书情况,以及是否归还。至少包括:借阅 ID主键,可设置为自动编号、书号、读者编号、借阅数量、借阅日期、是否归还、管理员编号等。4.还书记录表。作用:记录还书情况。至少包括:还书 ID主键,可设置为自动编号、书号、读者编号、归还数量、归还日期、是否超期超过假设 45 天为超期、超期天数、管理员编号等。附:为简化操作,续借可视为归还后再借。5.管理员信息表。作用:记录负责管理书库和借书还书工作的管理员信息。至少包括:管理员编号、职工编号在职工档案表中的职工编号、用户名、密码、管理员级别等。.word.zl.6.职工档案表表。作用:记录职工档案。至少包括:职工编号、性别、单位、职称、职务、出生日期、学历、其它字段自拟。7.入库单表。作用:记录图书馆购置图书补充书库图书时的入库书单。包括字段:入库单 ID、入库日期、入库书号、书名、入库数量其它请根据图书现有库存表自拟经手人编号等。实验步骤 1、设计并创立数据库。)设计数据库,绘制 ERD 设计图。)根据 ERD 创立数据库中的所有表,并根据业务需求正确设置主键、外键、约束条件、默认值等。)创立关系图,建立表之间的联系以保证参照完整性。注意,建表时,表中的外键的数据类型应当与其所参照的主表中的主键数据类型一致。至少创立题目所需要的表)根本数据录入。可以直接录入,也可将其它格式的表中的数据导入,或查询其它表中可利用的数据并插入到现有的表中。ERD 设计图 图书现有库存表PK书号 书名 作者 简介 类别 价格 出版社 出版日期 现有库存数 最小库存量 库存总量 库存位置读者信息表PK读者编号 证件类型 证件号码 姓名 性别 职业 所属单位 地址 联系电话借书记录表PK借阅IDFK1书号FK2读者编号 借阅数量 借阅日期 是否归还 管理员编号还书记录表PK还书IDFK1书号FK2读者编号 归还数量 归还日期 是否超期 超期天数FK3管理员编号管理员信息表PK管理员编号FK1职工编号 用户名 密码 管理员级别职工档案表PK职工编号 姓名 性别 单位 职称 职务 出生日期 学历入库单表PK入库单ID 入库日期 入库书号 书名 入库数量 经手人编号 原代码:创立数据库、所有表,并根据业务需求正确设置主键、外键、约束条件、默认值 件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.createdatabase图书管理系统;use图书管理系统;createtable图书现有库存表(书号char(10)primarykey,书名char(10)notnull,作者char(10),简介varchar,类别char(10),价格moneynotnull,char,出版日期datetime,现有库存数int,最小库存量int,库存总量int,库存位置varchardefault3F45);createtable读者信息表(读者编号nchar(10)primarykey,证件类型nchar(4),证件nchar(13),char(10),性别char(2)default男,check(性别in(男,女),职业char(4),所属单位char(8),地址char(10),联系char(11)createtable借书记录表(借阅IDintidentity(1,1)primarykey,读者编号char(5),借阅数量int,借阅日期datetimedefaultgetdate(),是否归还char(2)default否,书号char(10),管理员编号char(10),foreignkey(书号)references图书现有库存表(书号),foreignkey(管理员编号)references管理员信息表(管理员编号),);createtable还书记录表(还书IDintidentity(1,1)primarykey,书号char(10),foreignkey(书号)references图书现有库存表(书号),归还数量int,归还日期datetimedefaultgetdate(),件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.是否超期char(2),超期天数char(5),管理员编号char(10),foreignkey(管理员编号)references管理员信息表(管理员编号),);createtable管理员信息表(管理员编号char(10)primarykey,职工编号char(10),foreignkey(职工编号)references职工档案表(职工编号),用户名char(10)notnull,密码char(6)notnull,管理员级别char(4);createtable职工档案表(职工编号char(10)primarykey,char(10),性别char(2)default男,check(性别=男or性别=女),单位char(10),职称char(4),职务char(10),出生日期datetime,学历char(10);createtable入库单表(入库单IDchar(10),入库日期datetime,入库书号char(10),书名char(10),入库数量int);关系图和数据录入情况、其它测试方案及数据:实验步骤 2、创立存储过程。任选一题 创立可以按“书号参数进展图书库存信息查询的存储过程。创立可以按“类别参数进展某类图书库存信息查询的存储过程。创立可以按“读者编号进展读者信息查询的存储过程。自拟题 件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.先在下面第一栏填写自己选择的题目和欲实现的功能,再在其余栏目中分别填写自己的代码以及执行情况、测试方案和数据、测试结果等等。如果选做多个或全做或额外完成自拟题,请自己依照格式添加栏目,自拟题请写清题意。我的存储过程选题:描述题目和欲实现的功能 1.创立可以按“书号参数进展图书库存信息查询的存储过程。能够使得用户输入书号,就可以查询这本书的信息 原代码:创立存储过程按照书号进展查询ashcx,参数为 shuhao 定义为 char20 createprocashcxshuhaochar(20)as begin select*from图书现有库存表where书号=shuhao end 调用存储过程,查询书号为30001图书的信息 execashcxshuhao=30001 测试方案及数据:创立存储过程,并查询书号为 30001的图书信息 execashcxshuhao=30001 测试结果:(文字说明、原代码、结果贴图)查询书号为 3001书的信息 件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.实验步骤 3、创立触发器。任选一题 创立“借书记录表的插入触发器,每插入一条借阅记录就自动根据借阅数量减少该图书的“现有库存数量图书现有库存表,图书数量缺乏时可以报警,图书数量为零时拒绝插入借阅记录。创立“还书记录表的插入触发器,每当有读者归还图书时,插入一条还书记录,同时计算是否超期并在“是否超期和“超期天数字段填写结果。并根据还书时提供的读者编号和书号,将“借书记录表中的对应借阅记录的“是否归还中原来的“否置为“是注意考虑特殊情况,比方一本书由同一个读者反复屡次借阅或一次借阅多本的;根据“归还数量增加该图书的“现有库存数量图书现有库存表。创立“入库单表的插入触发器。在该表中插入图书入库记录时,在填写“图书编号和“入库数量时,通过触发器的作用,能判断在“图书现有库存表是否存在该图书的库存记录,如果有,那么自动更新该图书的现有库存数量,如果现有库存表中不存在该图书的库存记录 有可能是原来没有的新书,那么在“图书现有库存表中自动插入该图书的库存记录。对于书库中已经存在的图书 此次只是补充图书数量能通过触发器的作用自动填写入库单该记录中其它的未填的该书的对应信息提示,根据书号在图书现有库存表查询。自拟题目。先在下面第一栏填写自己选择的题目和欲实现的功能,再在其余栏目中分别填写自己的代码以及执行情况、测试方案和数据、测试结果等等。如果选做多个或全做或额外完成自拟题,请自己依照格式添加栏目,自拟题请写清题意。我的触发器选题:描述题目和欲实现的功能 创立“借书记录表的插入触发器,每插入一条借阅记录就自动根据借阅数量减少该图书的“现有库存数量图书现有库存表,图书数量缺乏时可以报警,图书数量为零时拒绝插入借阅记录。原代码:/*创立“借书记录表的插入触发器,每插入一条借阅记录就自动根据 借阅数量减少该图书的“现有库存数量图书现有库存表,图书数量 缺乏时可以报警,图书数量为零时拒绝插入借阅记录。*/-use 图书管理系统 altertriggercrcfq on借书记录表 forinsert as begin-声明变量 件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.declarezdbhint,shchar(10),dzbhchar(5),jyslint,glybhchar(10)declarexykcsint -查询库存数量 selectzdbh=inserted.借阅ID,sh=inserted.书号,dzbh=inserted.读者编号,jysl=inserted.借阅数量,xykcs=图书现有库存表.现有库存数 from图书现有库存表joininsertedoninserted.书号=图书现有库存表.书号 if(jysl=xykcs)begin-根据插入的销售记录的数量更新库存量 update图书现有库存表 set现有库存数=现有库存数-jysl wheresh=书号 end else begin print库存量缺乏!rollbacktransaction end end 测试方案及数据:在借书记录表中插入数据:借书记录表(书号,读者编号,借阅数量)values(30002,0001,1)在借书记录表中插入数据:借书记录表(书号,读者编号,借阅数量)values(30002,0001,55)测试结果:(文字说明、原代码、结果贴图)第一次插入数据:借书记录表(书号,读者编号,借阅数量)values(30002,0001,1)use图书管理系统 select*from借书记录表 go select*from图书现有库存表 go insertinto借书记录表(书号,读者编号,借阅数量)values(30002,0001,55)件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.go select*from借书记录表 go select*from图书现有库存表 go 第二次测试插入数据:借书记录表(书号,读者编号,借阅数量)values(30002,0001,55)输出结果“库存量缺乏!use图书管理系统 select*from借书记录表 go select*from图书现有库存表 go insertinto借书记录表(书号,读者编号,借阅数量)values(30002,0001,55)go select*from借书记录表 go select*from图书现有库存表 go 件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.本实验总结:1.创立、修改、删除、调用存储过程的语法。创立存储过程语法:CREATE PROC EDURE procedure_name ;number parameter data_type VARYING =default OUTPUT ,.n 修改存储过程语法:ALTER PROC EDURE procedure_name ;number parameter data_type VARYING =default OUTPUT ,.n 删除存储过程语法:DROP PROCEDURE 存储过程名称 调用存储过程的语法:EXECUTE Procedure_Name2 2.举例说明存储过程中参数的应用方法。创立存储过程时设置一个参数,调用时必须也要有参数 createprocashcxshuhaochar(20)as begin select*from图书现有库存表where书号=shuhao end 调用存储过程 execashcxshuhao=30001 3.简述触发器的种类。For 触发器和 After 触发器:要求只有执行某一操作INSERT UPDATE DELETE 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器;Instead of 触发器:触发器表示并不执行其所定义的操作INSERT、UPDATE、DELETE ,而仅是执行触发器本身。既可在表上定义 INSTEAD OF 触发器,也可以在视图上定义 INSTEAD OF 触发器,但对同一操作只能定义一个 INSTEAD OF 触发器。件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.4.什么是幻表?举例说明其用途。幻表就是在创立触发器时自己生成临时表,分别是 deleted 和 inserted,Inserted 表就是放新的记录,Delete 表就是放旧的记录,当你插入时,要插入的记录是新的,所以可以在 Insert 表中找到。当你删除时,要删除的记录是旧的,所以可以在 Deleted 表中找到。例如借书记录表中的借阅触发器,插入书号,读者编号,借阅数量时,插入新的容就在inserted表中 5.创立、修改、删除触发器的语法。CreateTRIGGER trigger_name ON table|view WITH ENCRYPTION FOR|AFTER|INSTEAD OF Insert ,Update WITH APPEND NOT FOR REPLICATION AS IF Update(column)AND|or Update(column).n|IF(COLUMNS_UpdateD()bitwise_operator updated_bitmask)parison_operator column_bitmask .n sql_statement .n 修改将 create改成 alter 件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的.word.zl.删除用 drop 触发器名 6.举例说明测试触发器有效的方法。例如在此实验中的借书插入触发器,先查询图书现有库存表,再查询借书记录表,然后调用触发器,插入一条借书记录,再次查询图书现有库存表和借书记录表,观察其中茶如的数据是否对应。7.你在实验中遇到的主要问题及解决方案。触发器的声明变量搞不明白,不知道什么变量需要声明,查资料书上网查找解决。8.在本实验中你所参考的资料列表。SQL Server2021 数据库应用与开发教程 数据库系统概论 要求:1.本文件以“学号班级-数据库原理课程设计-实验 2.docx命名。文件保存并关闭后打包成 RAR文件,提交到我 bbwhs163.。注意:你的学号放在前。打包时先关闭被打包的文件,以免提交的容丧失或打不开。2.提交时间:从发布任务时间起两周完成。3.报告格式和容要求:a.容和格式整齐。大标题采用黑体四号字加粗,小标题采用小四号字加粗。正文文字不小于五号,建议采用宋体,单倍行距。b.贴图时请剪裁到适当大小,要保证打印时可以看清,但也不要太大以免“越界。c.不要在报告中写与实验容无关的话,容要有条理、完整、并能突出重点,要将遇到的主要问题说明。4.主动查阅资料,坚持自己亲手完成实验,弄清每个步骤和相关原理。件实验原理存储过程概念存储过程是事先编好的存储在数据库中的一组被编译了的命令集合这些命令用来完成对数据库的指定操作存储过程可以承受用户的输入参数向客户端返回表格或标量结果和消息调用数据定义语言和数据操作表事件相关的特殊的存储过程它的行不是由程序调用也不是手工启动而是由事件来触发比方当对一个表进展操作时就会激活它行触发器经常用于加强数据的完整性约束和业务规那么等实验任务此作业成绩得分根据你完成的任务的难给教师或在报告中明确标注题意假定有学校的图书馆管理信息系统可以用于日常管理书库和同学们的借还书工作以以下出参考的库表情况根据管理的业务需求来分析该管理信息系统的数据库应至少包括如下数据表打号的是必须有的