delimiter $$ create trigger choose_delete_after_trigger after delete on choose for each row begin update course set available=available+1 where course_no=; end; $$ delimiter ;
最后,再为choose表创建一个before、insert触发器和一个before、update触发器实现检查约束:一个学生某门课程的成绩score要求在0到100之间取值。
delimiter $$ create trigger choose_insert_before_trigger before insert on choose for each row begin if>=0 && <=100) then set = ; else insert into mytable values(0); end if; end; $$ delimiter ; delimiter $$ create trigger choose_update_before_trigger before update on choose for each row begin if>=0 && <=100) then set = ; else insert into mytable values(0); end if; end; $$ delimiter ;
4.MySQL触发器中的触发事件有几种?触发器的触发时间有几种? 答:请参看章节内容。
5.创建触发器时,有哪些注意事项?
答:本题修改为:使用触发器时,有哪些注意事项? 请参看章节内容。
6.使用触发器可以实现哪些数据的自动维护?
答:使用触发器可以实现检查约束
使用触发器可以自动维护冗余数据,例如课程available的字段值。 使用触发器可以模拟外键级联选项。
7.您是如何理解临时表的?临时表与基表有什么关系? 答:请参看章节内容。请参看章节内容
8.您是如何理解视图、子查询、临时表、派生表之间的关系的? 答:请参看章节内容。
第八章答案
1.编写“选课系统”的存储过程,并对其进行调用、测试。 答:请参看本章代码。
2.查看存储过程定义的方法有哪些? 答:请参看章节内容。
3.请罗列存储过程与函数的区别与联系。 答:请参看章节内容。
4.数据库开发人员定义错误处理机制时,需要提供错误处理类型、错误触发条件以及错误处理程序等信息,错误处理类型有哪些?什么是错误触发条件以及错误处理程序?
答:错误处理类型的取值要么是continue,要么是exit。当错误处理类型是continue时,表示错误发生后,MySQL立即执行自定义错误处理程序,然后忽略该错误继续执行其他MySQL语句。当错误处理类型是exit时,表示错误发生后,MySQL立即执行自定义错误处理程序,然后立刻停止其他MySQL语句的执行。
错误触发条件以及错误处理程序,请参看章节内容。 5.游标的使用步骤是什么?每一个步骤完成什么任务? 答:请参看章节内容。
6.举例说明,如何遍历游标中的“结果集”。 答:请参看章节内容。
7.使用预处理SQL语句有哪些注意事项?预处理SQL语句与静态SQL语句有什么区别和联系?
答:注意事项请参看章节内容;预处理SQL语句与静态SQL语句有什么区别和联系请参看章节内容。
第九章答案
1.请简单描述事务的必要性。 答:请参看章节内容。
2.关闭MySQL自动提交的方法有哪些?您推荐数据库开发人员使用哪一种方法? 答:请参看章节内容。推荐数据库开发人员尽可能地使用MySQL命令“start transaction;”隐式地关闭自动提交,使用MySQL命令“commit;”显示地提交更新语句。
3.关闭MySQL自动提交后,提交更新语句的方法有哪些?您推荐数据库开发人员使用哪一种方法?
答:请参看章节内容。推荐数据库开发人员尽可能地使用MySQL命令“start transaction;”隐式地关闭自动提交,使用MySQL命令“commit;”显示地提交更新语句。
4.请简单描述典型的事务处理使用方法。 答:请参看章节内容。
5.请简单描述典型的事务保存点使用方法。您是如何理解保存点是“临时状态”这句话的?
答:请参看章节内容。
6.请简单描述锁机制的必要性。 答:请参看章节内容。
7.为MyISAM表施加表级锁的语法格式是什么? 答:请参看章节内容。
8.为MyISAM表施加表级锁时,read local与read选项有什么区别? 答:请参看章节内容。
9.您是如何理解锁的粒度、隐式锁与显式锁、锁的类型、锁的钥匙以及锁的生命周期等概念的?
答:请参看章节内容。
10.您如何理解锁的粒度、锁的生命周期与数据库的并发性能之间的关系?
答:锁的粒度越小,锁的生命周期越短,数据库的并发性能就越高,数据库越适合做并发更新操作。反之亦然。
11.您如何理解锁的粒度、锁的生命周期与服务器资源之间的关系?
答:锁粒度越小,完成某个功能时所需要的加锁、解锁的次数就会越多,反而会消耗较多的服务器资源,甚至会出现资源的恶性竞争,甚至发生死锁问题。锁是数据库管理系统重要的数据库资源,需要耗费一定的服务器内存,锁的生命周期越长,该锁占用服务器内存的时间间隔就越长;锁的生命周期越短,该锁占用服务器内存的时间间隔就越短。因此为了节省服务器资源,数据库开发人员必须尽可能的缩短锁的生命周期,尽可能早地释放锁资源。
12.“选课系统”应该使用哪种粒度的锁机制?为什么?
答:对于“选课系统”而言,系统需要为上百名学生,甚至几百名学生同时提供选课、调课、退课服务。为了提高并发性能,“选课系统”将选用行级锁,这也是“选课系统”的各个数据库表使用InnoDB存储引擎的原因。
13.为InnoDB表施加行级锁的语法格式是什么? 答:请参看章节内容。
14.请列举现实生活中的“资源竞争”问题,如何使用锁机制解决此类“资源竞争”问题?
答:现实生活中,选课系统就存在“资源竞争”问题,解决方案请参看章节内容。 15.完成调课功能的replace_course_proc()存储过程以及完成选课功能choose_proc()存储过程使用了行级锁解决了“资源竞争”问题,能不能将存储过程中下面的select语句写在“start transaction;”语句之前,以便缩短行级锁的生命周期?
说明:题目中的“select state into status from course where course_no=c_no”应该修改为
“select available into s3 from course where course_no=c_no for update” 答:select available into s3 from course where course_no=c_no for update 必须放在“start transaction;”语句之后,目的是:延长行级排他锁的生命周期,所以需要将该select语句写在了start transaction语句后,封装到事务中。
16.InnoDB什么时候使用间隙锁,什么时候使用记录锁?间隙锁与记录锁之间的区别是什么?
答: 当事务的隔离级别设置为repeatable read,此时为InnoDB表施加行级锁,默认情况下使用间隙锁。当事务的隔离级别设置为read uncommitted或者read committed,此时为InnoDB表施加行级锁,默认情况下使用记录锁(record lock)。
间隙锁(next-key锁):当检索条件为某个区间(例如account_no between 1 and 100)范围时,对该区间范围施加共享锁或排他锁后,满足该区间范围的记录(例如account_no=1或者account_no=2的记录)存在共享锁或排他锁;满足该区间范围,但表中不存在的记录(例如account_no=50或者account_no=100的记录)也会存在共享锁或排他锁,即行级锁会锁定相邻的键(next-key locking)。
记录锁:与间隙锁不同,记录锁仅仅为满足该查询范围的记录施加共享锁或排他锁。
17.锁等待与死锁之间是什么关系? 答:请参看章节内容。
18.请解释事务的ACID特性。 答:请参看章节内容。
19.MySQL支持哪些事务隔离级别?默认的事务隔离级别是什么? 答:请参看章节内容。
20.每一种事务隔离级别可能引发什么问题? 答:脏读、不可重复读、幻读、死锁等问题。
21.脏读现象、不可重复读现象以及幻读现象之间有什么区别? 答:请参看章节内容。
22.您如何理解事务、锁机制、事务的隔离级别之间的关系? 答:请参看章节内容。
select state into status from course where course_no=c_no;
第十章答案
1.选用PHP脚本语言开发网上选课系统的原因是什么? 答:请参看章节内容。
2.请简单描述PHP脚本程序的工作流程。 答:请参看章节内容。
3.什么是软件开发生命周期?对于一个真实的软件项目而言,您觉得编码阶段是软件开发生命周期中最难实现的环节吗?
答:请参看章节内容。对于一个真实的软件项目而言,编码阶段仅仅是软件开发生命周期中的其中一个环节,并不是最难实现的环节,俗话说,万事开头难,一般而言,最难实现的环节一般是系统规划和系统分析阶段。
4.请简单描述网上选课系统的目标、可行性分析、项目进度、人员分工。 答:请参看章节内容。
5.请简单描述网上选课系统的功能需求分析与非功能需求分析。 答:请参看章节内容。
6.请简单描述网上选课系统的系统设计。 答:请参看章节内容。
7.按照本章要求、步骤实现网上选课系统。 答:请参看本章代码部分内容。
8.根据本章的知识,参看视图与触发器章节的内容,为网上选课系统添加两个新的功能模块:重置所有学生的密码,重置所有教师的密码。
答:代码略。
9.根据本章的知识,为网上选课系统添加新的功能模块:任课教师编辑未经审核的课程信息。
答:代码略。
10.什么是MVC模式,使用MVC模式开发程序有哪些优点? 答:请参看章节内容。
11.编写功能测试用例,测试网上选课系统其他功能模块。 答:请参看章节内容。
相关推荐: