MySQL视图触发器存储过程总结

一、视图

 create VIEW 视图名称 AS sql语句
  • 例如
 create view login_view as select * from login

视图是虚拟的表

1.优点:

  • 简化sql
  • 安全(不暴露字段)
  • 降低耦合

2.缺点

  • 不能提高性能
  • 不适合分布式和大数据的项目

3. 适合oa和erp

4. 视图的curd(真实的数据表数据会跟着变动)

 insert into login_view (id,name) VALUES(1,'uuu');
 insert into login_view (id,name) VALUES(2,'1212');

5.限制加入视图的数据(语句加入with check option)

 create view login_view2 as select * from login where id > 2 with check option;
 insert into login_view2 (id,name) values (0,'uuu');

6.不能新增或修改的视图

  • 有聚合函数
  • 包含子查询
  • JOIN查询
  • 常量视图(不常用)

二、触发器

触发器类似于开发使用的框架的事件

 create trigger [触发器名称] [触发器执行事件] ON [表] for each row [函数或者某个动作]
  • 触发器的执行事件:before,after
  • 执行的动作点: insert, update, delete
  • 函数:begin end;
  • 动作: update, insert
create trigger 
  login_trigger_before 
before insert on 
  login 
for each row 
begin 
  update test_trigger set count = count+1 where id = 1;
end;
  • 一般使用程序逻辑代替,不在sql语句做这种逻辑

三、存储过程

  • 可以理解为一段sql语句的集合(方法),实现业务逻辑;是事先编译好的并存储在数据库中的(所以效率会高一些);Mysql的函数
 create procedure 存储过程名称(参数列表)
 begin
 declare 游标名 cursor for 查询语句;
 declare [变量名称][类型]default;
 open游标名 -- 打开
 fetch 游标名 into xxx,
 业务处理
   代码;业务逻辑区域
 end;
调用: call 存储过程名称(参数列表)
删除: drop procedure 存储过程名称
 create procedure login_procedure(in id int, out ret varchar(2))
 begin
  declare id int default 0;
  declare blag int default 1;
  declare name varchar(10) default "";
  declare shop_cursor cursor for select shop_name,uid from shop;
  select shop_name into ret  from shop where uid = id;
  -- 异常处理:注意游标在读取数据的时候,不断读取
  declare continue handler for not found set blag = 0;
  open  shop_cursor;
  read_loop:loop
    fetch shop_cursor into name,id;
    if blag = 0 then
       leave read_loop;
    end if;
    if id = 63 then
      set ret = name;
    end if;
  end loop read_loop;
  set ret = "ttt";
  set ret = y;
 end;
 call login_procedure(87,@ret);
 select @ret;
  1. 参数类型:
  • IN : 只是给存储过程传递参数
  • OUT : 表示只是用来输出(可以直接set设置)
  • INOUT : 既可以传递也可以输出
  1. 数据类型
  • 数值类型:int,float,double,decimal
  • 时间类型:timestamp,date,datetime
  • 字符串:char, varchar, text
  1. 流程控制语句
  • if 的语句格式为:
  if 条件表达式 then 语句
   [elseif 条件表达式 then 语句] ...
   [else 语句]
  end if
  • case的语法格式
case 表达式
  when 值 then 语句
  when 值 then 语句
  ...
  [else 语句]
end case
case
when 表达式 then 语句
when 表达式 then 语句
...
[else 语句]
end case
  • loop循环语法格式
  [标号:]loop
循环语句
end loop [标号]
  • 声明语句结束符,可以自定义:
DELIMITER [符合]
delimiter $$
$$
  1. 优点:
  • 执行速度快,每个sql语句都需要编译再运行,但是存储过程都是预先编译好的,可直接运行(并不能显著提高速度)
  • 减少网络流量.我们传输一个存储过程比我们传输大量的SQL语句的开销小得多.
  • 提高系统安全性.因为存储过程可以使用权限控制,而且参数化的存储过程可以有效地防止SQL注入.
  • 耦合性降低.当我们的表结构发生了调整之后,我们可以修改相应的存储过程,应用程序需要改动的地方就小了.
  1. 缺点(最大的问题就是移植性差)
  • 移植性差,因为存储过程是和数据库绑定的,如果我们要更换数据库之类的操作,可能很多地方需要改动.
  • 修改不方便.因为对于存储过程而言,我们并不能特别有效的调试,它的一些bug可能发现的更.
  • 优势不明显和赘余功能.对于小型web应用来说,如果我们使用语句缓存,发现编译SQL的开销并不大,存储过程却需要检查权限一类的开销,这些赘余功能也会在一定程度上拖累性能.
  1. 存储过程适用的应用:OA,ERP

四、物化视图(mysql中并不存在)

  • 如果数据有几千万的时候 select count(*),sum(),avg() from table_name;会很慢,可以用辅助索引或者物化视图处理.
  • 创建一个实体的表 物化视图表
    记录:查询的结果
    查询 物化视图表==>聚合结果集
    数据:实时性一致性
    对数据实时性要求高:触发器 INSERT UPDATE DELETE 的时候提供触发器的方法,通过触发器对物化视图表进行修改
    对数据实时性要求低:定时对存储过程
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容