zoukankan      html  css  js  c++  java
  • MySQL中的View视图以及函数的作用

    MySQL中的View视图

    • 作用一:提高了重用性,就像一个函数。如果要频繁获取user的name和goods的name。就应该使用以下sql语言。

    示例:

    select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

      但有了视图就不一样了,创建视图other。

    示例:

    create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id;

      创建好视图后,就可以这样获取user的name和goods的name。

    示例:

    select * from other;

      以上sql语句,就能获取user的name和goods的name了。

    • 作用二:对数据库重构,却不影响程序的运行。

      假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下:

    测试表:usera有id,name,age字段
    
    测试表:userb有id,name,sex字段

      这时如果php端使用sql语句:select * from user;那就会提示该表不存在,这时该如何解决呢。解决方案:创建视图。以下sql语句创建视图:

    create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name;

      以上假设name都是唯一的。此时php端使用sql语句:select * from user;就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。

    • 作用三:提高了安全性能。可以对不同的用户,设定不同的视图。

    例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。

    示例如下:

    create view other as select a.name, a.age from user as a;

      这样的话,使用sql语句:select * from other; 最多就只能获取name和age的数据,其他的数据就获取不了了。

    • 作用四:让数据更加清晰,想要什么样的数据,就创建什么样的视图。

    MySQL中的函数

    • 什么是函数

    mysql中的函数与存储过程类似,都是一组SQL集;

    • 与存储过程的区别

    函数可以return值,存储过程不能直接return,但是有输出参数可以输出多个返回值;

    函数可以嵌入到sql语句中使用,而存储过程不能;

    函数一般用于实现较简单的有针对性的功能(如求绝对值、返回当前时间等),存储过程用于实现复杂的功能(如复杂的业务逻辑功能);

    • mysql自带函数

    mysql数据库中提供了很丰富的函数。mysql函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。通过这些函数,可抄以简化用户的操作。

    示例:

    1.求绝对值ABS

    2.求ASCII

    3.时间相关(NOW、CURRENT_DATE、CURRENT_TIME)

    • 自定义函数

       自定义个函数,判断输入参数是否大于等于10:

    -- ----------------------------
    -- Function structure for `func_compare`
    -- ----------------------------
    DROP FUNCTION IF EXISTS `func_compare`;
    DELIMITER ;;
    CREATE DEFINER=`root`@`localhost` FUNCTION `func_compare`(a int) RETURNS varchar(200) CHARSET utf8
    BEGIN
        #Routine body goes here...
      IF a >= 10 THEN
            RETURN '大于等于10';
      ELSE
          RETURN '小于10';
      END IF;
    END
    ;;
    DELIMITER ;

    验证函数:

    SELECT func_compare(9), func_compare(11)

    执行结果:

    参考链接:https://www.cnblogs.com/duanrantao/p/9330920.html

    http://baijiahao.baidu.com/s?id=1598694746553095044&wfr=spider&for=pc

  • 相关阅读:
    IE下全局对象报 脚本错误提示“对象不支持此属性或方法”解决方案
    IE6、7下inline-block不起作用
    IE下图片切换的时候,图片总是切换不成功---根本问题是IE缓存图片
    Fiddler 跟踪 手机页面数据包
    Regular Expression Matching——没理解的动态规划
    常见排序算法分析
    Flyweight模式(亨元模式)
    组合模式(Composite Pattern)
    装饰者模式(不太理解的设计模式)
    适配器模式
  • 原文地址:https://www.cnblogs.com/donleo123/p/12856061.html
Copyright © 2011-2022 走看看