zoukankan      html  css  js  c++  java
  • 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; 

  • 相关阅读:
    背景图片自适应大小(平铺)
    墨卡托投影示意图
    C# 两个类的实例之间相同属性的值的复制
    C# 并行编程 Task
    C# 并行编程 PLINQ
    C# 并行编程 Parallel
    仰望星空
    Ubuntu的人道精神
    神经网络简介
    并行计算简介
  • 原文地址:https://www.cnblogs.com/frfwef/p/14572552.html
Copyright © 2011-2022 走看看