美文网首页
Mysql 视图,触发器 ,存储过程总结--基础篇

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

作者: 编程人生 | 来源:发表于2022-01-08 14:36 被阅读0次

    视图:

    一.什么是视图:

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

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

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

    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 视图,触发器 ,存储过程总结--基础篇

          本文链接:https://www.haomeiwen.com/subject/rwmecrtx.html