MySql 中的动态视图实现

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

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

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

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

MySql 中的动态视图实现

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

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

MySql 中的动态视图实现

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

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

MySql 中的动态视图实现

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

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

MySql 中的动态视图实现

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

MySql 中的动态视图实现

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

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