MySQL数据库基础与实践 第2版 课后习题答案 CH05课后题答案.docx
MySQL数据库基础与实践
PAGE2
STYLEREF\n标题1错误!文档中没有指定样式的文字。STYLEREF标题1错误!文档中没有指定样式的文字。
PAGE16
实践与练习答案
第5章
1.选择题
1-5DBCAA
6-10DBAAA
2.概念题
(1)视图是一个虚拟的表,其结构和数据是建立在对表的查询基础上的,也可以说视图的内容由查询定义,而视图中的数据并不像表、索引那样需要占用存储空间,视图中保存的仅仅是一条select语句,其数据来自于视图所引用的数据库表或者其他视图,对视图的操作与对表的操作一样,可以对其进行查询、修改、删除。
(2)保护数据安全、简化操作、使分散数据集中、提高数据的逻辑独立性。
(3)触发器定义了一系列操作,这一系列操作称为触发程序,当触发事件发生时,触发程序会自动运行。
触发器主要用于监视某个表的插入(insert)、更新(update)和删除(delete)等更新操作,这些操作可以分别激活该表的insert、update和delete类型的触发程序运行,从而实现数据的自动维护。
(4)触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象在MySQL中,可以使用createtrigger语句创建触发器,具体语法格式为:
createtriggertrigger_nametrigger_timetrigger_event
ontbl_nameforeachlowtrigger_stmt
与其他数据库对象一样,可以使用drop语句将触发器从数据库中删除,语法格式为:droptrigger[schema_name.]trigger_name
3.操作题
(1)创建一个表tb,其中只有一列a,在表上创建一个触发器,每次插入操作时将用户变量count值增加1。
createtabletb(aint);
set@count=0;
createtriggertb1_insertafterinsert
ontbforeachrow
set@count=@count+1;
(2)在(1)基础上,创建一个由delete触发多个执行语句的触发器tb_delete,每次删除记录时,@count记录删除的个数。
set@old_value=null,@count=0;
delimiter$$
createtriggertb_deleteafterdelete
ontbforeachrow
begin
set@old_value=old.a;
set@count=@count+1;
end$$
delimiter;
(3)定义了一个update触发程序,用于检查更新每一行时将使用的新值,并更改值,使之位于0~100内。(提示:它必须是before触发程序,因为需要将值用于更新行之前对其进行检查。)
delimiter$$
createtriggerudp_checkbeforeupdate
ontbforeachrow
begin
ifnew.a0then
setnew.a=0;
elseifnew.a1100then
setnew.a=100;
endif;
end;
$$
delimiter;