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

2020-03-01  本文已影响0人  心似南风

一、视图

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

视图是虚拟的表

1.优点:

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.不能新增或修改的视图

二、触发器

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

 create trigger [触发器名称] [触发器执行事件] ON [表] for each row [函数或者某个动作]
create trigger 
  login_trigger_before 
before insert on 
  login 
for each row 
begin 
  update test_trigger set count = count+1 where id = 1;
end;

三、存储过程

 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. 参数类型:
  1. 数据类型
  1. 流程控制语句
  if 条件表达式 then 语句
   [elseif 条件表达式 then 语句] ...
   [else 语句]
  end if
case 表达式
  when 值 then 语句
  when 值 then 语句
  ...
  [else 语句]
end case
case
when 表达式 then 语句
when 表达式 then 语句
...
[else 语句]
end case
  [标号:]loop
循环语句
end loop [标号]
DELIMITER [符合]
delimiter $$
$$
  1. 优点:
  1. 缺点(最大的问题就是移植性差)
  1. 存储过程适用的应用:OA,ERP

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

上一篇下一篇

猜你喜欢

热点阅读