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 语句中不能使用存储过程,而函数则可以使用.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容