MySQL数据库基础与实例教程第7章.ppt
《MySQL数据库基础与实例教程第7章.ppt》由会员分享,可在线阅读,更多相关《MySQL数据库基础与实例教程第7章.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、孔祥盛孔祥盛MySQLMySQL数据库基础与实例教程数据库基础与实例教程 之之视图触发器视图触发器1 12 23 3 本章首先讲解了本章首先讲解了视图以及触发器的视图以及触发器的管理及使用,然后管理及使用,然后结合结合“选课系统选课系统”分别介绍视图以及分别介绍视图以及触发器在该系统中触发器在该系统中的应用。的应用。4 4触发器触发器视图视图临时表临时表派生表(派生表(Derived Table)5 5视图、子查询、临时表、派生表视图、子查询、临时表、派生表内容一览内容一览 视图与表有很多相似视图与表有很多相似的地方,视图也是由若的地方,视图也是由若干个字段以及若干条记干个字段以及若干条记录构
2、成,视图也可以作录构成,视图也可以作为为select语句的数据源。语句的数据源。甚至在某些特定条件下,甚至在某些特定条件下,可以通过视图对表进行可以通过视图对表进行更新操作。更新操作。7.1 7.1 视图视图1 12 23 3 视图中保存的仅仅视图中保存的仅仅是一条是一条select语句,语句,视图中的源数据都来视图中的源数据都来自于数据库表,数据自于数据库表,数据库表称为基本表或者库表称为基本表或者基表,视图称为虚表。基表,视图称为虚表。查查看看视图视图的定的定义义创创建建视图视图视图视图在在“选课选课系系统统”中的中的应应用用45视图视图的作用的作用删删除除视图视图7.1 7.1 视图视图
3、6 67 7 视图中保存的仅仅视图中保存的仅仅是一条是一条select语句,语句,视图中的源数据都来视图中的源数据都来自于数据库表,数据自于数据库表,数据库表称为基本表或者库表称为基本表或者基表,视图称为虚表。基表,视图称为虚表。检查视图检查视图local与与cascade检查视图检查视图7.1 7.1 视图视图创建视图的语法格式如下。创建视图的语法格式如下。create view 视图名视图名 (视图字段列表视图字段列表)asselect语句语句7.1.1 7.1.1 创建视图创建视图任务布置任务布置1:上机操作,完成本书:上机操作,完成本书场景描述场景描述1的任务要求,理解的任务要求,理解
4、“对于经常使用的、结构对于经常使用的、结构复杂的复杂的select语句,建议将其封装为视图语句,建议将其封装为视图”。7.1.1 7.1.1 创建视图创建视图可以使用下面四种方法查看视图的定义。可以使用下面四种方法查看视图的定义。1在在choose数据库中成功地创建了视图数据库中成功地创建了视图available_course_view后,该视图的定义默后,该视图的定义默认保存在数据库目录(例如认保存在数据库目录(例如choose目录)下,目录)下,文件名为文件名为available_course_view.frm。使用。使用记事本打开该文件,即可查看该视图的定义。记事本打开该文件,即可查看该
5、视图的定义。7.1.2 7.1.2 查看视图的定义查看视图的定义可以使用下面四种方法查看视图的定义。可以使用下面四种方法查看视图的定义。2视图是一个虚表,也可以使用查看表结构视图是一个虚表,也可以使用查看表结构的方式查看视图的定义。的方式查看视图的定义。3MySQL命令命令“show tables;”命令不仅显命令不仅显示当前数据库中所有的基表,也会将所有的示当前数据库中所有的基表,也会将所有的视图罗列出来。视图罗列出来。7.1.2 7.1.2 查看视图的定义查看视图的定义可以使用下面四种方法查看视图的定义。可以使用下面四种方法查看视图的定义。4MySQL系统数据库系统数据库informati
6、on_schema的的views表存储了所有视图的定义,使用下面表存储了所有视图的定义,使用下面的的select语句查询该表的所有记录,也可以查语句查询该表的所有记录,也可以查看所有视图的详细信息。看所有视图的详细信息。select*from information_schema.viewsG7.1.2 7.1.2 查看视图的定义查看视图的定义从现在开始,本书将选择从现在开始,本书将选择“方案一方案一”实现学实现学生选课功能。方案一与方案二的唯一区别在生选课功能。方案一与方案二的唯一区别在于:方案一中的课程于:方案一中的课程course表比方案二中的表比方案二中的课程课程course表多了一个
7、表多了一个“剩余的学生名额剩余的学生名额”available字段。字段。任务布置任务布置2:上机操作,完成本书:上机操作,完成本书场景描述场景描述2的任务要求。的任务要求。7.1.3 7.1.3 视图在视图在“选课系统选课系统”中的应用中的应用1使操作变得简单使操作变得简单2避免数据冗余避免数据冗余3增强数据安全性增强数据安全性4提高数据的逻辑独立性提高数据的逻辑独立性7.1.4 7.1.4 视图的作用视图的作用如果某个视图不再使用,可以使用如果某个视图不再使用,可以使用drop view语句将该视图删除,语法格式如下。语句将该视图删除,语法格式如下。drop view 视图名视图名7.1.5
8、 7.1.5 删除视图删除视图视图分为普通视图与检查视图。视图分为普通视图与检查视图。通过检查视图更新基表数据时,只有满足通过检查视图更新基表数据时,只有满足检查条件的更新语句才能成功执行。创建检检查条件的更新语句才能成功执行。创建检查视图的语法格式如下。查视图的语法格式如下。create view 视图名视图名 (视图字段列表视图字段列表)asselect语句语句with local|cascaded check option7.1.6 7.1.6 检查视图检查视图任务布置任务布置3:上机操作,完成本书:上机操作,完成本书场景描述场景描述3:普通视图与更新操作:普通视图与更新操作的任务要求。
9、的任务要求。任务布置任务布置4:上机操作,完成本书:上机操作,完成本书场景描述场景描述4:检查视图与更新操作:检查视图与更新操作的任务要求。的任务要求。然后分析普通视图与检查视图之间的区别。然后分析普通视图与检查视图之间的区别。7.1.6 7.1.6 检查视图检查视图检检查查视视图图分分为为local检检查查视视图图与与cascade检检查查视图。视图。with_check_option的值为的值为1时表示时表示local(local视图),视图),值为值为2时表示时表示cascade(级联视图,在视图的(级联视图,在视图的基础上再次创建另一个视图)。基础上再次创建另一个视图)。7.1.6 l
10、ocal7.1.6 local与与cascadecascade检查视图检查视图local 检查检查视图与视图与cascade检检查视图查视图7.1.6 local7.1.6 local与与cascadecascade检查视图检查视图1 12 23 3触发器主要用于监视某触发器主要用于监视某个表的个表的insert、update以及以及delete等更新操作,等更新操作,这些操作可以分别激活这些操作可以分别激活该表的该表的insert、update或者或者delete类型的触发类型的触发程序运行,从而实现数程序运行,从而实现数据的自动维护。据的自动维护。使用触使用触发发器器实现检查约实现检查约束
11、束准准备备工作工作使用触使用触发发器器维护维护冗余数据冗余数据45使用触使用触发发器模器模拟拟外外键级联选项键级联选项查查看触看触发发器的定器的定义义7.2 7.2 触发器触发器6 67 7触发器主要用于监视某触发器主要用于监视某个表的个表的insert、update以及以及delete等更新操作,等更新操作,这些操作可以分别激活这些操作可以分别激活该表的该表的insert、update或者或者delete类型的触发类型的触发程序运行,从而实现数程序运行,从而实现数据的自动维护。据的自动维护。删删除触除触发发器器使用触使用触发发器的注意事器的注意事项项7.2 7.2 触发器触发器7.2 7.2
12、 触发器触发器使用使用create trigger语句可以创建一个触发器,语句可以创建一个触发器,语法格式如下。语法格式如下。create trigger 触发器名触发器名 触发时间触发时间 触发事件触发事件 on 表名表名 for each rowbegin触发程序触发程序end7.2.1 7.2.1 准备工作准备工作MySQLMySQL的触发事件有三种:的触发事件有三种:insert insert:将新记录插入表时激活触发程序,:将新记录插入表时激活触发程序,例如通过例如通过insertinsert、load dataload data和和replacereplace语句,可以语句,可以激
13、活触发程序运行。激活触发程序运行。7.2.1 7.2.1 准备工作准备工作MySQLMySQL的触发事件有三种:的触发事件有三种:update update:更改某一行记录时激活触发程序,:更改某一行记录时激活触发程序,例如通过例如通过updateupdate语句,可以激活触发程序运行。语句,可以激活触发程序运行。delete delete:从表中删除某一行记录时激活触发:从表中删除某一行记录时激活触发程序,例如通过程序,例如通过deletedelete和和replacereplace语句,可以激活语句,可以激活触发程序运行。触发程序运行。7.2.1 7.2.1 准备工作准备工作 触发器的触发
14、时间有两种:触发器的触发时间有两种:beforebefore与与afterafter。beforebefore表示在触发事件发生之前执行触发程表示在触发事件发生之前执行触发程序。序。afterafter表示在触发事件发生之后执行触发器。表示在触发事件发生之后执行触发器。因此严格意义上讲一个数据库表最多可以设因此严格意义上讲一个数据库表最多可以设置六种类型的触发器。置六种类型的触发器。7.2.1 7.2.1 准备工作准备工作for each rowfor each row表示行级触发器。表示行级触发器。目前目前MySQLMySQL仅支持行级触发器,不支持语仅支持行级触发器,不支持语句级别的触发器
15、(例如句级别的触发器(例如create tablecreate table等语句)。等语句)。for each rowfor each row表示更新(表示更新(insertinsert、updateupdate或或者者deletedelete)操作影响的每一条记录都会执行)操作影响的每一条记录都会执行一次触发程序。一次触发程序。7.2.1 7.2.1 准备工作准备工作触发程序中可以使用触发程序中可以使用old关键字与关键字与new关键字。关键字。当向表插入新记录时,在触发程序中可以当向表插入新记录时,在触发程序中可以使用使用new关键字表示新记录,当需要访问新关键字表示新记录,当需要访问新记
16、录的某个字段值时,可以使用记录的某个字段值时,可以使用“new.字段字段名名”的方式访问。的方式访问。7.2.1 7.2.1 准备工作准备工作触发程序中可以使用触发程序中可以使用old关键字与关键字与new关键字。关键字。当从表中删除某条旧记录时,在触发程序当从表中删除某条旧记录时,在触发程序中可以使用中可以使用old关键字表示旧记录,当需要访关键字表示旧记录,当需要访问旧记录的某个字段值时,可以使用问旧记录的某个字段值时,可以使用“old.字段名字段名”的方式访问。的方式访问。7.2.1 7.2.1 准备工作准备工作触发程序中可以使用触发程序中可以使用oldold关键字与关键字与newnew
17、关键字。关键字。当修改表的某条记录时,在触发程序中当修改表的某条记录时,在触发程序中可以使用可以使用oldold关键字表示修改前的旧记录、使关键字表示修改前的旧记录、使用用newnew关键字表示修改后的新记录。当需要访关键字表示修改后的新记录。当需要访问旧记录的某个字段值时,可以使用问旧记录的某个字段值时,可以使用“old.old.字段名字段名”的方式访问。当需要访问修改后的的方式访问。当需要访问修改后的新记录的某个字段值时,可以使用新记录的某个字段值时,可以使用“new.new.字字段名段名”的方式访问。的方式访问。7.2.1 7.2.1 准备工作准备工作触发程序中可以使用触发程序中可以使用
18、old关键字与关键字与new关键字。关键字。old记录是只读的,可以引用它,但不能记录是只读的,可以引用它,但不能更改它。在更改它。在before触发程序中,可使用触发程序中,可使用“set new.col_name=value”更改更改new记录的值。记录的值。7.2.1 7.2.1 准备工作准备工作 前前面面曾曾经经提提到到,MySQL可可以以使使用用复复合合数数据据类类型型set或或者者enum对对字字段段的的取取值值范范围围进进行行检检查查约约束束,使使用用复复合合数数据据类类型型可可以以实实现现离离散散的的字字符符串串数数据据的的检检查查约约束束,对对于于数数值值型型的的数数不不建建
19、议议使使用用set或或者者enum实实现现检检查查约约束束,可可以以使用触发器实现。使用触发器实现。7.2.2 7.2.2 使用触发器实现检查约束使用触发器实现检查约束任务布置任务布置5 5:上机操作,完成本书:上机操作,完成本书场景描述场景描述5 5:使用触发器实现检查约束:使用触发器实现检查约束的任务要求。的任务要求。7.2.2 7.2.2 使用触发器实现检查约束使用触发器实现检查约束 冗余的数据需要额外的维护,维护冗余数冗余的数据需要额外的维护,维护冗余数据时,为了避免数据不一致问题的发生(例据时,为了避免数据不一致问题的发生(例如:剩余的学生名额如:剩余的学生名额+已选学生人数已选学生
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 数据库 基础 实例教程
限制150内