精华内容
下载资源
问答
  • MySQL视图存储过程一. 视图视图是一种特殊的表,但不包含应有的任何列和数据,只包含使用时动态检索数据的查询(即:sql查询语句)。使用视图的目的,在本质上就是用来查看存储在别处的数据。【引例】/*使用sql...

    MySQL视图和存储过程

    一. 视图

    视图是一种特殊的表,但不包含表中应有的任何列和数据,只包含使用时动态检索数据的查询(即:sql查询语句)。

    使用视图的目的,在本质上就是用来查看存储在别处的数据。

    【引例】

    /*使用sql查询*/

    select cust_name,cust_contact from customers,orders,orderitems

    where customers.cust_id=orders.cust_id

    and orderitems.order_num=orders.order_num

    and prod_id='TNT2';

    查询结果

    cust_name

    cust_contact

    1

    Yosemite Place

    Y Sam

    2

    Coyote Inc.

    Y Lee

    /*创建视图*/

    create view productcustomers AS

    select cust_name,cust_contact,prod_id

    from customers,orders,orderitems

    where customers.cust_id=orders.cust_id

    and orderitems.order_num=orders.order_num;

    /*查询结果*/

    select cust_name,cust_contact from productcustomers where prod_id='TNT2';

    查询结果

    cust_name

    cust_contact

    1

    Yosemite Place

    Y Sam

    2

    Coyote Inc.

    Y Lee

    从此引例中可以看出,所谓视图就是封装了一堆的sql查询语句

    ⭐【作用】

    重用sql。

    简化复杂的sql操作,封装后可以方便的使用视图,而不必知道它的基本查询细节。

    保护数据,可以只授予表的特定部分的访问权限而不是整个表的访问权限。

    ⭐【规定】

    名字唯一(不能与表名和其他视图名重名)

    视图不能创建索引,也不能有关联的触发器

    视图和表可以混着用

    【案例一】用视图封装格式

    /*

    concat()函数

    功能:将多个字符串连接成一个字符串。

    语法:concat(str1, str2,...)

    返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

    RTRIM(str)

    返回删除了后面空格字符的字符串str。

    LTRIM(str)

    返回删除了前面空格字符的字符串str

    */

    select CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')') AS vend_title

    from vendors

    order by vend_name;

    查询结果

    vend_title

    1

    ACME(USA)

    2

    Anvils R Us(USA)

    3

    Furball Inc.(USA)

    4

    Jet Set(England)

    5

    Jouets Et Ours(France)

    6

    LT Supplies(USA)

    /*创建视图*/

    create view vendorlocation as

    select CONCAT(RTRIM(vend_name),'(',RTRIM(vend_country),')') AS vend_title

    from vendors

    order by vend_name;

    /*使用视图*/

    select * from vendorlocation;

    二. 存储过程

    先考虑这么一个问题:当我们执行某个处理需要针对许多表的多条sql语句,语句执行的顺序也是不固定的,可能会随某些数据在表中存不存在而发生变化,这个时候怎么处理?

    简单来说,存储过程就是为了方便以后使用而事先保存的sql语句集合。

    【引例】

    /*

    创建存储过程

    1. 如果需要参数,可以在()中给出,即使没有参数,也要写()。

    2. 用 begin 和 end 来限制执行体,end要分号结尾。

    */

    create procedure productprice()

    begin

    select AVG(prod_price) as priceAvg from products;

    end;

    /*调用存储过程*/

    call productprice();

    结果展示

    priceAvg

    1

    16.133571

    🌞可以将存储过程理解成sql中的函数

    【案例一】使用参数(传出)

    /*

    创建存储过程:

    1. 此存储过程接收三个参数:pl、ph、pa

    2. out:指出相应的参数是用来传出去的(返回给调用者)

    3. in:调用者传递给存储过程的

    4. inout:同时具备上述两者作用

    */

    create procedure productprice2(

    out pl DECIMAL(8,2),

    OUT ph DECIMAL(8,2),

    OUT pa decimal(8,2)

    )

    begin

    select min(prod_price) into pl from products;

    select max(prod_price) into ph from products;

    select avg(prod_price) into pa from products;

    end;

    /*

    调用存储过程

    1. @用来声明变量

    2. @pricelow,@pricehigh,@priceavg在此处用来接收返回值

    3. 该调用并不显示任何数据,只返回变量。

    */

    call productprice2(@pricelow,@pricehigh,@priceavg);

    /*查看变量*/

    select @pricelow,@pricehigh,@priceavg;

    结果展示

    @pricelow

    @pricehigh

    @priceavg

    1

    2.50

    55.00

    16.13

    【案例二】(传入和传出)

    /*创建存储过程*/

    create procedure ordertotal(

    in onnumber int,

    out ototal decimal(9,2)

    )

    begin

    select sum(item_price*quantity) from orderitems where order_num=onnumber into ototal;

    end;

    /*调用存储过程*/

    call ordertotal(20009,@ototall);

    /*查看变量*/

    select @ototall;

    结果展示

    @ototall

    149.87

    【案例三】综合

    /*

    创建存储过程

    判断逻辑:针对有些顾客要收营业税,有些则不

    taxable为1则征收

    taxable为0则不征收

    */

    create procedure ordertotal(

    in onnumber int,

    in taxable boolean,

    out ototal decimal(8,2)

    )

    begin

    -- declare variable for total 声明一个总量(局部变量)

    declare total decimal(8,2);

    # declare tax percentage 交税的百分比

    declare taxpercent int default 6;

    -- 销售额=销售总量×单价

    select sum(item_price*quantity) from orderitems

    where order_num=onnumber into total;

    -- 判断要不要交税;注意if格式

    if taxable then

    select total+(total/100*taxpercent) into total;

    end if;

    select total into ototal;

    end;

    /*不交税的调用过程*/

    call ordertotal(20005,0,@total);

    /*交税的调用过程*/

    call ordertotal(20005,1,@total1);

    /*展示结果*/

    select @total,@total1;

    结果展示

    @total

    @total1

    1

    149.87

    158.86

    展开全文
  • MySQL视图存储过程一. 视图视图是一种特殊的表,但不包含应有的任何列和数据,只包含使用时动态检索数据的查询(即:sql查询语句)。使用视图的目的,在本质上就是用来查看存储在别处的数据。【引例】/*使用sql...

    MySQL视图和存储过程

    一. 视图

    视图是一种特殊的表,但不包含表中应有的任何列和数据,只包含使用时动态检索数据的查询(即:sql查询语句)。

    使用视图的目的,在本质上就是用来查看存储在别处的数据。

    【引例】

    /*使用sql查询*/

    select cust_name,cust_contact from customers,orders,orderitems

    where customers.cust_id=orders.cust_id

    and orderitems.order_num=orders.order_num

    and prod_id=‘TNT2‘;

    查询结果

    cust_name

    cust_contact

    1

    Yosemite Place

    Y Sam

    2

    Coyote Inc.

    Y Lee

    /*创建视图*/

    create view productcustomers AS

    select cust_name,cust_contact,prod_id

    from customers,orders,orderitems

    where customers.cust_id=orders.cust_id

    and orderitems.order_num=orders.order_num;

    /*查询结果*/

    select cust_name,cust_contact from productcustomers where prod_id=‘TNT2‘;

    查询结果

    cust_name

    cust_contact

    1

    Yosemite Place

    Y Sam

    2

    Coyote Inc.

    Y Lee

    ?

    从此引例中可以看出,所谓视图就是封装了一堆的sql查询语句

    ?

    ??【作用】

    重用sql。

    简化复杂的sql操作,封装后可以方便的使用视图,而不必知道它的基本查询细节。

    保护数据,可以只授予表的特定部分的访问权限而不是整个表的访问权限。

    ??【规定】

    名字唯一(不能与表名和其他视图名重名)

    视图不能创建索引,也不能有关联的触发器

    视图和表可以混着用

    ?

    【案例一】用视图封装格式

    /*

    concat()函数

    功能:将多个字符串连接成一个字符串。

    语法:concat(str1, str2,...)

    返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

    RTRIM(str)

    返回删除了后面空格字符的字符串str。

    LTRIM(str)

    返回删除了前面空格字符的字符串str

    */

    select CONCAT(RTRIM(vend_name),‘(‘,RTRIM(vend_country),‘)‘) AS vend_title

    from vendors

    order by vend_name;

    查询结果

    vend_title

    1

    ACME(USA)

    2

    Anvils R Us(USA)

    3

    Furball Inc.(USA)

    4

    Jet Set(England)

    5

    Jouets Et Ours(France)

    6

    LT Supplies(USA)

    /*创建视图*/

    create view vendorlocation as

    select CONCAT(RTRIM(vend_name),‘(‘,RTRIM(vend_country),‘)‘) AS vend_title

    from vendors

    order by vend_name;

    /*使用视图*/

    select * from vendorlocation;

    ??

    二. 存储过程

    先考虑这么一个问题:当我们执行某个处理需要针对许多表的多条sql语句,语句执行的顺序也是不固定的,可能会随某些数据在表中存不存在而发生变化,这个时候怎么处理?

    简单来说,存储过程就是为了方便以后使用而事先保存的sql语句集合。

    【引例】

    /*

    创建存储过程

    1. 如果需要参数,可以在()中给出,即使没有参数,也要写()。

    2. 用 begin 和 end 来限制执行体,end要分号结尾。

    */

    create procedure productprice()

    begin

    select AVG(prod_price) as priceAvg from products;

    end;

    /*调用存储过程*/

    call productprice();

    结果展示

    priceAvg

    1

    16.133571

    ?

    ??可以将存储过程理解成sql中的函数

    ?

    ?

    【案例一】使用参数(传出)

    /*

    创建存储过程:

    1. 此存储过程接收三个参数:pl、ph、pa

    2. out:指出相应的参数是用来传出去的(返回给调用者)

    3. in:调用者传递给存储过程的

    4. inout:同时具备上述两者作用

    */

    create procedure productprice2(

    out pl DECIMAL(8,2),

    OUT ph DECIMAL(8,2),

    OUT pa decimal(8,2)

    )

    begin

    select min(prod_price) into pl from products;

    select max(prod_price) into ph from products;

    select avg(prod_price) into pa from products;

    end;

    /*

    调用存储过程

    1. @用来声明变量

    2. @pricelow,@pricehigh,@priceavg在此处用来接收返回值

    3. 该调用并不显示任何数据,只返回变量。

    */

    call productprice2(@pricelow,@pricehigh,@priceavg);

    /*查看变量*/

    select @pricelow,@pricehigh,@priceavg;

    结果展示

    @pricelow

    @pricehigh

    @priceavg

    1

    2.50

    55.00

    16.13

    ?

    ?

    【案例二】(传入和传出)

    /*创建存储过程*/

    create procedure ordertotal(

    in onnumber int,

    out ototal decimal(9,2)

    )

    begin

    select sum(item_price*quantity) from orderitems where order_num=onnumber into ototal;

    end;

    /*调用存储过程*/

    call ordertotal(20009,@ototall);

    /*查看变量*/

    select @ototall;

    结果展示

    @ototall

    149.87

    ?

    ?

    【案例三】综合

    /*

    创建存储过程

    判断逻辑:针对有些顾客要收营业税,有些则不

    taxable为1则征收

    taxable为0则不征收

    */

    create procedure ordertotal(

    in onnumber int,

    in taxable boolean,

    out ototal decimal(8,2)

    )

    begin

    -- declare variable for total 声明一个总量(局部变量)

    declare total decimal(8,2);

    # declare tax percentage 交税的百分比

    declare taxpercent int default 6;

    -- 销售额=销售总量×单价

    select sum(item_price*quantity) from orderitems

    where order_num=onnumber into total;

    -- 判断要不要交税;注意if格式

    if taxable then

    select total+(total/100*taxpercent) into total;

    end if;

    select total into ototal;

    end;

    /*不交税的调用过程*/

    call ordertotal(20005,0,@total);

    /*交税的调用过程*/

    call ordertotal(20005,1,@total1);

    /*展示结果*/

    select @total,@total1;

    结果展示

    @total

    @total1

    1

    149.87

    158.86

    原文:https://www.cnblogs.com/juzhuxiaozhu/p/13167470.html

    展开全文
  • 一、视图什么是视图视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典的。通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询使用的表,使用视图...

    一、视图

    什么是视图

    视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

    通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。

    基表:用来创建视图的表叫做基表base table

    为什么要使用视图

    因为视图的诸多优点,如下

    1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

    2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

    3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

    总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

    视图算法

    对于视图的算法,我们需要在创建视图的时候指定,基本语法:

    create + [algorithm = temptable/merge/undefined] + view + 视图名 + as + select语句 with check option;

    视图算法,即系统对视图以及外部查询视图的select语句的一种解析方式。视图算法有三种,分别为:

    undefined:未定义(默认的),这不是一种实际使用的算法,而是一个“推卸责任”的算法。在未定义的情况下,告诉系统,视图没有定义算法,请自己选择。

    temptable:临时表算法,系统先执行视图的select语句,后执行外部查询语句。

    merge:合并算法,系统先将视图对应的select语句与外部查询视图的select语句进行合并,然后再执行。此算法比较高效,且在未定义算法的时候,经常会默认选择此算法。

    with check option

    可以这么解释:通过视图进行的修改,必须也能通过该视图看到修改后的结果。比如你insert,那么加的这条记录在刷新视图后必须可以看到;如果修改,修改完的结果也必须能通过该视图看到;如果删除,当然只能删除视图里有显示的记录。

    二、存储过程

    什么是存储过程

    简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

    ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

    特点

    有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

    函数的普遍特性:模块化,封装,代码复用;

    速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

    示例

    存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;

    几点说明:

    DELIMITER //:把默认的输入的结束符;替换成//。

    DEFINER:创建者;

    DROP procedure if EXISTS `lmh_test`;

    DELIMITER //

    CREATE PROCEDURE `lmh_test`(IN a VARCHAR(64),IN y INT)

    BEGIN

    SELECT a1.id as '编号',b1.baseid as '唯一标识符',b1.title as '标题',b1.issn as 'issn',b1.`year` as `year` FROM cnki_journal_base a1,cnki_journal_yearinfo b1 WHERE a1.baseid=a AND b1.baseid = a AND b1.`year`=y GROUP BY b1.baseid;

    END

    //

    DELIMITER ;

    调用过程

    call lmh_test('GWDZ',2018);

    展开全文
  • select distinct a.name,a.xtype from sysobjects a,syscomments b where a.id=b.id and b.text like ‘%所需检索的关键字%’ ORDER BY a.xtype desc

    select distinct a.name,a.xtype from sysobjects a,syscomments b
    where a.id=b.id and b.text like ‘%所需检索的关键字%’
    ORDER BY a.xtype desc

    展开全文
  • 使用视图视图仅仅是用来查看存储在别处的数据的一种设施,本身不包含数据,返回的数据都是从其他表检索出来的,视图能更改数据格式和表示,最常见的应用就是重用 SQL 语句,简化复杂的 SQL 操作。操作视图CREATE ...
  • DBA09 - MySQL视图、MySQL存储过程

    万次阅读 2018-09-05 19:51:10
    一、MySQL 视图 ...– 视图并不在数据库存储的数据的形式存在。 – 行和列的数据来自定义视图时查询所引用的基表,并 且在具体引用视图时动态生成。 – 更新视图的数据,就是更新基表的数据 ...
  • 数据库字典视图user_objects用于显示当前用户包含的所有对象。...--1、查询数据库视图存储过程、函数 select object_name,created,status from user_objects where object_type in ('PROCEDURE','FUNCTION
  • 例如A向B转账,二人账户并不属于一家银行,在转账过程中由于网络问题,导致A显示转账 成功,二B账户显示并未到账的信息不一致错误,此时如果是开启了一个事务,由于两条信息不一致将视为操作失败。  事务的作用:...
  • 视图(view)是一种虚拟存在的表,是一个逻辑表,它本身是不包含数据的。作为一个select语句保存在数据字典的。通过视图,可以展现基表(用来创建视图的表叫做基表base table)的部分数据,说白了视图的数据就是来自于...
  • MySQL视图、函数、存储过程视图视图的概念视图的操作视图的使用场景存储过程和函数存储过程 视图 视图的概念 1、什么是视图视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select...
  • mysql 视图存储过程

    2019-01-21 10:51:00
    视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典的。 通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询使用的表,使用视图动态生成。 基表:...
  • 一、索引 索引就相当于表的目录,可以更快的找到需要的内容。 优点:可以提高查询效率,而且数据...但是,视图并不在数据库存储的数据值集形式存在。行和列数据来自定义视图的查询所引用的表,并且在引用视图...
  • 文章目录视图概念特点注意项操作存储过程概念优点缺点创建存储过程关键语法创建存储过程查看存储过程调用存储过程触发器概念语法 视图 概念 视图是一个虚拟表,其内容由select查询语句定义; 和真实的表一样,视图...
  • 视图:虚拟的表,是一条sql查询的结果集,因此它不包含任何表任何列和数据,只能用来查询数据; 作用:重用sql 隐藏数据 对数据的类型进行更改(视图返回的数据格式可以与底层表的类型和格式不一样)。 存储...
  • select * from syscomments where text like '%内容%' select * from sysobjectswhere id in (id_list)and xtype= 'P' 转载于:https://www.cnblogs.com/littleCode/p/3632398.html
  • 视图、储存过程、游标和触发器视图存储过程为什么要使用存储过程使用存储过程执行存储过程创建存储过程删除存储过程使用参数建立智能存储过程检查存储过程游标使用游标使用游标数据触发器 MySQL 5添加了对视图存储...
  • 但是,视图并不在数据库存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。具体视图的作用自行度娘,直接上语句,用语句说明一切-- 创建commodity的伪表create ...
  • 视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全,如果原表改名或者删除则视图也失效。 视图操作 创建视图 语...
  • 视图 ...视图中不存放数据,数据依然存放在视图引用的原始数据表中; 可以根据需求来提前创建不同的视图。 企业管理器创建视图: T-SQL创建视图: USE DBName go IF EXISTS(SELECT * F...
  • sql中存储过程视图、函数的区别

    千次阅读 2015-03-13 10:20:34
     视图由SELECT查询语句所定义的一个虚拟表,是查看数据的一种非常有效的方式,同真实的数据表一样,视图也包含一系列带有名称的数据列和数据行,但视图与数据表又有很大的不同,视图中的数据并不真实的存在于数据库...
  • 包含数据的表不一样,视图包含使用时动态检索数据的查询。 什么是视图 在之前的笔记有个例子:检索订购了‘TNT2’的客户的信息: mysql> SELECT cust_name, cust_contact -> FROM customers, orders, ...
  • 在Sqlserver2012数据库,可以通过SQL语句查询包含某个字符串文本的所有数据库对象,比如存储过程视图、自定义函数以及触发器等等,通过一条SQL语句即可查出所有包含此文本的数据库对象。SQL语句主要涉及到...
  • 视图(view)是一种虚拟存在的表,是一个逻辑表,它本身是不包含数据的。作为一个select语句保存在数据字典的。 通过视图,可以展现基表(用来创建视图的表叫做基表base table)的部分数据,说白了视图的数据就是...
  • 视图: 虚拟的表,只包含使用时动态检索数据的查询,而自身不包含任何数据。 作用: 1》sql简化。 2》安全性。...2》如果查询视图语句中含有order by,则创建视图中的order by会被覆盖。
  • 但是,视图并不在数据库存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。 具体视图的作用自行度娘,直接上语句,用语句说明一切 -- 创建commodity的伪表 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,066
精华内容 426
关键字:

视图中包含存储过程