Mysql 视图,触发器 ,存储过程总结--基础篇

视图:

一.什么是视图:

视图是从一个或几个表或视图中导出的虚拟表,其结构和数据来自对表的查询,在物理上是不存在的.建立视图查询的表被称为基表,

视图并不在数据库中以存储的数据值集的形式存在,它的行和列数据都来自基表,并且是视图在被引用时动态生成的.

二.为什么会有视图,视图有哪些好处.

1.提高查询效率:只在建立视图时执行一次查询,以后只需要用一条简单的语句查询视图即可.

2.提高数据安全性:通过视图,用户只能看到和修改可见的数据,对数据库中原始表数据既看不见,也不能访问.

3.定制数据:通过定义视图,可以让不同的用户以不同的方式看到不同或相同的数据,这样不同的用户在共用一个数据库时,能访问

的数据是有区别的.

4.对表的合并和分割:表的数量大时,我们会对表水平或者垂直拆分,用视图可以不用分割表,不会使表结构发生变化.采用视图在保持原有表结构关系的基础上,是程序设计更为简单.

5.对表的影响:对视图的建立和删除不会影响基表,只有对视图内容更新才会直接影响基表,另外,当视图的内容来自多个基表时,

不允许添加和删除数据.

三.创建视图

对视图的操作包括:创建视图,查看视图,修改视图,通过视图操作基表以及删除视图.

创建视图的语法规则:

create view 视图名[列名列表]

as 查询语句

[with check option]

check option是指 用于设置约束检查项

可按照基表的数量分为:单源表视图和多源表视图.

查看视图的方式: desc 视图名 或者 desccribe 视图名.2. 使用show create view 查看视图.

四.修改视图 :

Alter view 视图名

as 查询语句.

或者使用

create [or replace view]

view 视图名[列表名]

as 查询语句

[with check option]

五.通过视图操作基表以及删除视图

insert ,update, delete 可以插入,修改,删除数据,一般情况视图作为查询虚拟表,最后不要通过视图修改表数据.

而且当视图依赖多个数据表时,不允许添加和删除数据.

六.删除视图

语法规则:

DROP VIEW [IF EXISTS]

视图名[,视图名....]

MySql触发器

一.什么是触发器

触发器时一个特殊的存储过程,它与表紧密相连.基于表或视图定义了触发器后, 当表或视图中的数据有对应操作事件发生

时,激活触发器,从而执行触发器中所定义的语句.

在mysql 中 , 只用触发insert ,update , 和delete 语句时 才会执行所设置的操作,其他语句不会激活触发器.

二.触发器能干什么?

1.审计功能,使用触发器跟踪用户对数据库的操作,审计用户操作数据库的语句,把用户对数据库的更新写入审计表.

2.安全性,可以基于时间限制用户操作,可以基于数据库中的数据限制用户的操作.

3.实现复杂的数据完整性规则,触发器与规则不同,触发器可以引用列或数据库对象,可产生比规则更复杂的限制.

4.实现复杂的非标准的数据库相关完整性规则,触发器可以对数据库中相关的表进行连环更新.

三.怎样实现触发器.

创建触发器语法规则:

create tigger tigger_name

befor|after tigger_event

on table_name for each row tigger_stmt

tigger_event 表示触发事件,即触发执行条件,包括insert , update 和delete语句.'

table_name 表示对哪张表进行操作时产生触发事件.

for each row 表示table_name表中任何一条记录进行的操作满足触发条件时都会触发该触发器.

tigger_stmt 表示触发器被激活要执行的语句.

NEW.列名 用于INSERT 语句和UPDATE语句;

old.列名 用于delete 语句和update 语句.

列如:

create tigger insert_xskc1 after insert

on xskc

for each row begin

update number set 选课人数=选课人数+1 where 课程号 = new.课程号;

end;

查看触发器: show tiggers

删除触发器: delete tigger

存储过程和函数

一.什么是存储过程

用户对数据表的操作过程,往往不是单条sql语句就可以实现一个完整的操作目的,而是需要一组sql语句来实现.通过应用程序

调用存储过程和函数,可以接受参数,输出参数,返回多个结果集.

二.为什么用存储过程

为了提高数据库设计人员访问数据的速度,减少sql代码的重复编写,可以利用存储过程和函数管理数据库

三.存储过程和函数优点

存储过程和函数是一种独立的数据库对象,是在服务器上创建和运行的.它与存储在客户本机的本地sql语句相比有以下优点.

1.执行效率高

采用批处理的Transaction-SQL语句,需要每次在运行时都要进行编译和优化,因此效率较低.而存储过程则是在系统首次运行

时就会对其今夕分析和优化,并将其驻留在高速缓存中,从而提高了执行效率

2.模块化程序设计.

一个存储过程就是一个模块,用于封装并实现特定的功能,并在以后的程序中可多次重复调用,从而改进了应用程序的可维护性

3.减少网络流量

客户端调用存储过程和函数时,网络中传送的只是该调用语句,而不必从客户端发送大量的sql语句,从而大大降低了网络流量

和网络负载.

4.存储过程提供了一种安全机制

系统管理员通过执行了某一存储过程的权限进行限制,能够实现对应数据库的访问权限限制,避免了非授权用户对数据的访问.

从而保证了数据的安全.

四.创建存储过程.

语法规则:

CREATE Proceduce proceduce_name([procedure_parameter[,....]])

[characteristic...]routing_body

proceduce_name:所创建存储过程的名称.

proceduce_parameter:存储过程中的参数列表,其中的每个参数语法如下.

proceduce_name 表示参数名称 , type 表示参数类型, 参数类型可以是MySql软件支持的任意一种类型.

Characteristic 参数用于指定存储过程的特性

routing_body 是sql代码的内容.

五.创建函数

语法如下:

create function function_name([function_parameter[,....]])

returns type

[characteristic....]routine_body

function_name 表示所创建的函数名字

function_parameter 表示函数的参数列表,其形式和存储过程相同:

returns type 表示用于指定返回值类型:

characteristic 表示函数特性,其取值与存储过程中取值相同;

routine_body 表示函数的sql语句代码,用begin...end 来标识语句的开始与结束.

例:create definer='root'@'localhost' function 'func_cj'(xh char(10),kch varchar(3))

returns double(5,1)

begin

return(select 成绩 from xskc where xskc.'学号' = xh and xskc.'课程号'= kch);

end$$

六.调用存储过程

例如,调用一个school数据库里的proc_sch 存储过程, 表达方式: call school.proc_sch

七.调用函数

例如: select fun_cj('2016110102','103')成绩;

八.存储过程和函数的区别

1.复杂程度

存储过程的功能强大,可以执行包括修改表,数据查询等一系列数据库操作;函数不能用于对数据进行批量修改,不能实现

对全局数据库状态的操作.因此可以说,存储过程实现的功能要复杂一些,但函数的实现功能针对性比较强.

2.返回值

存储过程可以返回多个参数,如记录集,而函数只能返回或者表对象的一个变量值;存储过程有 in out inout 三种类型,而

函数只有in 一种类型.在定义存储过程和函数时,存储过程不需要声明返回类型,而函数需要声明返回类型,且函数体中必须

包含一个有效的return语句

3.执行

储存过程一般是作为一个独立部分执行的,而函数可以作为查询语句的一个部分使用select 语句来调用,由于函数可以返回

一个表对象,因此它可以在查询语句中位于from 关键字的后面:并且在sql 语句中不能使用存储过程,而函数则可以使用.

你可能感兴趣的:(Mysql 视图,触发器 ,存储过程总结--基础篇)