zoukankan      html  css  js  c++  java
  • MySql里动态视图的实现

              最近因为要参与公司的狐小E项目(https://www.hixiaoe.com/),需要学习Mysql数据库,项目中需要实现一个动态视图,但是Mysql的视图在创建时无法绑定用户变量,经过一番搜索发现了解决的办法,在这里写一写记录这个过程,也再分享给大家,希望大家一起学习,进步。

             首先啥是动态视图,大家可不要当成是Oracle的动态性能视图,我这里说的动态视图是指,一个取数据的视图,条件固定,但是参数不固定。给大家简单说一说我对动态视图的理解。

             系统有一张订单表。不同的人看到的数据范围也不同,数据的权限分成4个级别,个人,部门,上下级部门,所有。

             表的结构下图(字段等没有列全),大家注意红色框内的字段。

     

             Ownerid是订单的负责人字段,ownerdeptid是负责人部门字段,我们通过这两个字段来实现不同的人看不同数据。

            以下帖一段伪码来让大家理解一下我的构想。

     

           “查询人对t_order权限”、“当前查询人ID”、“当前查询人部门”,这些都是用户变量,Mysql里在创建视图的时候是不能写用户变量的。但是我们可以绕个圈子来实现,在Mysql的视图创建时,是可以写函数的,我们把需要的用户变量写在函数里,然后在创建视图的时候调用,这样就可以了。

           先来看一下不用函数的情况下报什么错

     

            如果不用函数把用户变包起来,创建视图不会成功,会报 Error Code: 1351. View's SELECT contains a variable or parameter 的错误。

           把用户变量替换成函数,再执行一下看看。

     

             来给大家看看函数里写了什么

     

    就是直接返回你想要的用户变量。

    很高兴能够参加公司狐小E(https://www.hixiaoe.com/)的项目开发,学习Mysql的更多知识,谢谢大家的帮助,让我能够在这个项目里快速成长起来。

  • 相关阅读:
    Spring DI模式 小样例
    java中经常使用的日期格式化(全)
    循环-15. 统计素数并求和(20)
    [Unity3D]Unity3D游戏开发之自己主动寻路与Mecanim动画系统的结合
    【UVA】11732
    Mac OS使用技巧之十六:系统失去响应怎么办?
    C# 保存窗口为图片(保存纵断面图)
    Linux Resin 安装
    Etcd学习(二)集群搭建Clustering
    android中选择控件与选择界面自然过度效果的实现--一种新的交互设计
  • 原文地址:https://www.cnblogs.com/wuweimin999/p/13297579.html
Copyright © 2011-2022 走看看