zoukankan      html  css  js  c++  java
  • mysql视图的创建、基本操作、作用

    一.mysql视图的创建

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

    先创建3张表

    1.1user表

    1.2goods表

     1.3ug表,比如某某人有哪些食物

     

    1.4创建视图  目的:查询某人有某食物

    create view 视图名称 as 普通的查询语句;

    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;

    利用navicat创建视图

    右键新建视图:

    SELECT
    PK_SR_MAIN AS pk_id,
    wthdbj AS wthdbj,
    HDTHYY AS hdthyy,
    MDJLX AS mdjlx,
    FK_HDGL_ID AS fk_hdgl_id,
    'sr_main' AS tname,
    SYS_XZQH AS sys_xzqh,
    SYS_BMID AS sys_bmid,
    '0' AS type,
    msyhd AS msyhd,
    mgshd AS mgshd,
    gs_hdthyy AS gs_hdthyy,
    fk_gs_hdgl_id AS fk_gs_hdgl_id
    FROM
    sr_main a,sr_dbbz b
    WHERE substr(a.sys_xzqh,1,6) = b.sjid and mdjlx = b.sdjlx and replace(a.MJTHKXZ,'0','') = b.syj7 and a.SYS_SPZT = 99 and mdjlx in ('db_jz','kn_jz','wb_jz') AND a.SYS_SCBJ = 0 and b.sys_scbj = 0 AND b.bz_str1 = '1'

    UNION ALL

    SELECT
    PK_SR_MAIN AS pk_id,
    wthdbj AS wthdbj,
    HDTHYY AS hdthyy,
    MDJLX AS mdjlx,
    FK_HDGL_ID AS fk_hdgl_id,
    'sr_main' AS tname,
    SYS_XZQH AS sys_xzqh,
    SYS_BMID AS sys_bmid,
    '0' AS type,
    msyhd AS msyhd,
    mgshd AS mgshd,
    gs_hdthyy AS gs_hdthyy,
    fk_gs_hdgl_id AS fk_gs_hdgl_id
    FROM
    sr_main
    WHERE SYS_SPZT = 99 and mdjlx in ('ls_jz','yl_jz') AND SYS_SCBJ = 0

    UNION ALL
    SELECT
    PK_SR_MAIN AS pk_id,
    wthdbj AS wthdbj,
    HDTHYY AS hdthyy,
    MDJLX AS mdjlx,
    FK_HDGL_ID AS fk_hdgl_id,
    'sr_main_bg' AS tname,
    SYS_XZQH AS sys_xzqh,
    SYS_BMID AS sys_bmid,
    '1' AS type,
    msyhd AS msyhd,
    mgshd AS mgshd,
    gs_hdthyy AS gs_hdthyy,
    fk_gs_hdgl_id AS fk_gs_hdgl_id
    FROM
    sr_main_bg a,sr_dbbz b
    WHERE substr(a.sys_xzqh,1,6) = b.sjid and replace(mdjlx,'_bg','_jz') = b.sdjlx and replace(a.MJTHKXZ,'0','') = b.syj7 and a.SYS_SPZT = 99 and mdjlx in ('db_bg','kn_bg','wb_bg') AND a.SYS_SCBJ = 0 and b.sys_scbj = 0 AND b.bz_str1 = '1'

    然后保存,输入视图名称 如:tcc_view_demo

    1.5查询视图

    select * from other;

     

    二:

        对数据库重构,却不影响程序的运行。假如因为某种需求,需要将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有多少视图

    show table  status  where  comment ='view';

    六.如何删除视图

    drop view视图名称;

    七.对视图的dml操作

    7.1增删改(dml):只能是单表操作

    INSERT INTO other (username , goodsname) VALUES ("张三" , "苹果");

    报错:> 1393 - Can not modify more than one base table through a join view 'test.other'

    原因:无法通过联接视图“test.other”修改多个基表

    八.视图的实质

    虚拟表

  • 相关阅读:
    tomcat解压版环境变量配置
    十天冲刺(第二阶段)
    十天冲刺(第二阶段)
    十天冲刺
    十天冲刺第二阶段()
    十天冲刺(第二阶段)
    十天冲刺(第二阶段)
    十天冲刺(第一阶段)
    十天冲刺(第一阶段)
    十天冲刺(第一阶段)
  • 原文地址:https://www.cnblogs.com/tongcc/p/11454282.html
Copyright © 2011-2022 走看看