Mysql(视图,存储过程,事务)

  视图(VIEW)

快速开发平台   视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据。


创建视图

格式 :Create View ViewName as

Sql语句 Create View View1 as Select id,name From table where id> 5


删除视图

格式:Drop View ViewName

Sql 语句Drop View View1


修改视图

格式 : Alter View ViewName as

Sql 语句 Alter View v1 As

Select A.ID ,B.Name form table

Left Join B ON A.ID =B.ID

Left join C ON A.ID = C.ID

Where table.ID>2


使用视图

Select * From V1

由于视图是虚拟表,无法使用对其真实的进行增删改操作,仅能用于查询

存储过程(Procedure)

我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。


一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式


创建存储过程

-- -- 创建存储过程(带参数)

delimiter \ create procedure p1(     

in i1 int,                        -- 传入参数i1    

 in i2 int,                        -- 传入参数i2     

inout i3 int,                   -- 即传入又能得到返回值    

 out r1 int                        -- 得到返回值 ) 

Begin     

DECLARE temp1 int;     

DECLARE temp2 int default 0;      

 set temp1 = 1;     

set r1 = i1 + i2 + temp1 + temp2;      

set i3 = i3 + 100; end\ delimiter ; -- 执行存储过程 

DECLARE @t1 INT default 3;           --  设置变量默认值为3

 DECLARE @t2 INT;                     --  设置变量

 CALL p1 (1, 2 ,@t1, @t2);            --  执行存储过程,并传入参数,t2自动取消

 SELECT @t1,@t2;                      --  查看存储过程输出结果

delimiter //        --自定义语句结尾符号,因为这里要执行好多句sql语句,所以就得自定义,以防止出错

create procedure p1()

BEGIN

    select * from tab1;

END//

delimiter ;         --自定义局域结尾符号结束

 

-- 执行存储过程

call p1()

 

带参数主要的三个类

  1. in  仅用于传入参数
  2. out  仅用于返回值用
  3. inout  即可传入又可当作返回值


-- 创建存储过程(带参数)

delimiter \ create procedure p1(    

 in i1 int,                        -- 传入参数i1    

 in i2 int,                        -- 传入参数i2   

 inout i3 int,                   -- 即传入又能得到返回值    

 out r1 int                        -- 得到返回值 )

 Begin     DECLARE temp1 int;   

 DECLARE temp2 int default 0;    

 set temp1 = 1;     

set r1 = i1 + i2 + temp1 + temp2;      

set i3 = i3 + 100; end\ delimiter ; -- 执行存储过程 

DECLARE @t1 INT default 3;           --  设置变量默认值为3 

DECLARE @t2 INT;                     --  设置变量 

CALL p1 (1, 2 ,@t1, @t2);            --  执行存储过程,并传入参数,t2自动取消

 SELECT @t1,@t2;                      --  查看存储过程输出结果


删除存储过程

Drop Procedure p1

事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。例如:当两张银行卡之间进行转账,甲方钱转出去了,突然光缆坏了,乙方还没收到钱,钱跑哪里去了,就为了防止这种情况,事务就出来了,事务可以防止这种事情发生。


应用事务实例:

delimiter \
create PROCEDURE p1(
    OUT p_return_code tinyint
)
BEGIN 
  DECLARE exit handler for sqlexception 
  BEGIN 
    -- ERROR 
    set p_return_code = 1; 
    rollback; 
  END; 
 
  DECLARE exit handler for sqlwarning 
  BEGIN 
    -- WARNING 
    set p_return_code = 2; 
    rollback; 
  END; 
 
  START TRANSACTION; 
    DELETE from tb1;                   -- sql语句都放在这个里面
    insert into tb2(name)values('seven');
  COMMIT; 
 
  -- SUCCESS 
  set p_return_code = 0; 
 
  END\
delimiter ;


执行存储过程
DECLARE @i TINYINT;
call p1(@i);
select @i; 

原文地址:https://www.cnblogs.com/frfwef/p/14572552.html