函数的功能:对日期时间进行格式化。 10.通过本章知识的讲解,您是如何理解中文全文检索的?您觉得实现中文全文检索的核心技术是什么?
答:请参考第五章课后习题答案。
第七章答案
1.视图与基表有什么区别和联系?视图与select语句有什么关系? 答:视图与基表有什么区别和联系:
数据库表称为基本表或者基表,视图称为虚表。基表的数据发生变化时,虚表的数据也会随之变化。
触发器基于表(严格地说是基于表的记录),这里的表是基表,不是临时表(temporary类型的表),也不是视图。
通过视图虽然可以更新基表的数据,但本书并不建议这样做。原因在于,通过视图更新基表数据,并不会触发触发器的运行。
视图与select语句有什么关系:
视图中保存的就是一条select语句。对于经常使用的结构复杂的select语句,建议将其封装为视图。
2.什么是检查视图?什么是local检查视图与cascaded检查视图?
答:创建视图时,没有使用with check option子句时,即with_check_option的值为0,表示视图为普通视图;使用with check option子句或者with cascaded check option子句时,表示该视图为cascaded检查视图;使用with local check option子句,表示该视图为local检查视图。
检查视图:通过检查视图更新基表数据时,检查视图对更新语句进行了先行检查,只有满足检查条件的更新语句才能成功执行。如果更新语句不满足检查视图定义的检查条件,则检查视图抛出异常,更新失败。
local检查视图与cascaded检查视图的区别联系,请参看7.1.7章节内容
3.请用触发器实现检查约束:一个学生某门课程的成绩score要求在0到100之间取值。
答:本题需要为choose表创建了一个before、insert触发器和一个before、update触发器。由于本章7.2.3章节中,已经为choose表创建了一个before、insert触发器和一个before、update触发器。而同一个表不能创建两个相同触发时间、触发事件的触发程序。
因此,为了实现本题功能,需要首先删除7.2.3章节中的两个触发器。 drop trigger choose_insert_before_trigger; drop trigger choose_delete_before_trigger; 然后再为choose表创建一个after、insert触发器和一个after、update触发器,自动维护课程available的字段值。
delimiter $$ create trigger choose_insert_after_trigger after insert on choose for each row begin update course set available=available-1 where course_no=new.course_no; end; $$ delimiter ;
delimiter $$ create trigger choose_delete_after_trigger after delete on choose for each row begin update course set available=available+1 where course_no=old.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(new.score>=0 && new.score<=100) then set new.score = new.score; 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(new.score>=0 && new.score<=100) then set new.score = new.score; else insert into mytable values(0); end if; end; $$ delimiter ;
4.MySQL触发器中的触发事件有几种?触发器的触发时间有几种? 答:请参看7.2.1章节内容。
5.创建触发器时,有哪些注意事项?
答:本题修改为:使用触发器时,有哪些注意事项? 请参看7.2.7章节内容。
6.使用触发器可以实现哪些数据的自动维护?
答:使用触发器可以实现检查约束
使用触发器可以自动维护冗余数据,例如课程available的字段值。 使用触发器可以模拟外键级联选项。
7.您是如何理解临时表的?临时表与基表有什么关系? 答:请参看7.3.1章节内容。请参看7.3.4章节内容
8.您是如何理解视图、子查询、临时表、派生表之间的关系的? 答:请参看7.5章节内容。
第八章答案
1.编写“选课系统”的存储过程,并对其进行调用、测试。 答:请参看本章代码。
2.查看存储过程定义的方法有哪些? 答:请参看8.1.4章节内容。
3.请罗列存储过程与函数的区别与联系。 答:请参看8.1.6章节内容。
4.数据库开发人员定义错误处理机制时,需要提供错误处理类型、错误触发条件以及错误处理程序等信息,错误处理类型有哪些?什么是错误触发条件以及错误处理程序?
答:错误处理类型的取值要么是continue,要么是exit。当错误处理类型是continue时,表示错误发生后,MySQL立即执行自定义错误处理程序,然后忽略该错误继续执行其他MySQL语句。当错误处理类型是exit时,表示错误发生后,MySQL立即执行自定义错误处理程序,然后立刻停止其他MySQL语句的执行。
错误触发条件以及错误处理程序,请参看8.2.1章节内容。 5.游标的使用步骤是什么?每一个步骤完成什么任务? 答:请参看8.3.1章节内容。
6.举例说明,如何遍历游标中的“结果集”。 答:请参看8.3.2章节内容。
7.使用预处理SQL语句有哪些注意事项?预处理SQL语句与静态SQL语句有什么区别和联系?
答:注意事项请参看8.4.1章节内容;预处理SQL语句与静态SQL语句有什么区别和联系请参看8.4.4章节内容。