MySQL里动态视图的实现

需求:

用户为C/S结构,每个用户根据角色不同,能看到不同的数据。系统会根据某个标识生成一个数据内容,然后通过统一的视图来访问。

要求,不能修改视图,也不能在试图外面再嵌套一层查询。

设计:

系统通过某种方法生成一个唯一的ID(可以是应用端,也可以是数据库的uuid),然后将试图与这个id进行关联即可。

代码:

drop table if exists test;
create table test (
    id int not null,

    name varchar(20) not null
);
insert into test values(1,'test1');
insert into test values(1,'test11');
insert into test values(1,'test111');
insert into test values(2,'test2');
insert into test values(2,'test22');
drop function if exists getSpid;
delimiter |
CREATE function getSpid()
    RETURNS int
  RETURN @spid;
|
delimiter ;
drop view if exists v_test;
create view v_test as
  select * from test where id=getSpid();

-- 测试代码
-- 开启session 1
set @spid=1;
select * from v_test;
-- 开启session 2
set @spid=2;
select * from v_test;

说明:

将生成的ID保持到session变量里面

然后建立自定义函数,返回这个变量

最后在视图里面调用这个函数

时间: 2024-11-01 15:51:34

MySQL里动态视图的实现的相关文章

php 实现MySQL里动态视图代码

系统通过某种方法生成一个唯一的ID(可以是应用端,也可以是数据库教程的uuid),然后将试图与这个id进行关联即可. 代码: drop table if exists test; create table test ( id int not null, name varchar(20) not null ); insert into test values(1,'test1'); insert into test values(1,'test11'); insert into test valu

MySQL存储过程里动态SQL的使用

MySQL的存储过程不好用,一般在应用开发过程中不建议使用.但有时候在数 据迁移等环境中,特别涉及到复杂点的逻辑处理,就需要存储过程的配合了,当 然,用其他语言写程序实现也是可以的,不过效率估计没有直接在数据库中操作 高. 有时候数据所在的表是不确定的,需要根据实际情况临时决定表名, 这时候就是动态SQL的用武之地了,以下示例展示了在一次数据导出的过程中使用 动态SQL的存储过程例子: delimiter // CREATE PROCEDURE `proc_rt_imp_group`() BEG

mysql基础之视图

原文:mysql基础之视图 在查询中,我们经常把查询结果 当成临时表来看. View是什么? View可以看一张虚拟表. 是表通过某种运算得到的一个投影. 既然视图只是表的某种查询的投影,所以主要步骤在于查询表上.查询的结果命名为视图就可以了. 视图与表的关系 视图是表的查询结果,自然表的数据改变了,影响视图的结果.   视图改变了呢? 0: 视图增删改也会影响表 1: 但是,视图并是总是能增删改的.   视图某种情况下,是可以修改的. 要求: 视图的数据和表的数据 11对应. 就像函数的映射.

为什么 mysql 里的 ibdata1 文件不断的增长?

ibdata1 file 我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题. 当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 -- 就是说磁盘快要满了. 一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用.而你已经启用了 innodb_file_per_table,所以问题是: ibdata1存了什么? 当你启用了 innodb_file_per_table,表被存储在他们自己的表空间里,但是共

NodeJs——(15)动态视图助手

(38)动态视图助手 express版本:4.13.4 ①作用:假如我们需要一个变量,在不同地方的模板(jade文件)都需要调用. 显然,我们不应该使用全局变量(因为可能会带来污染): 事实上,我们需要的是仅仅在模板中起作用的变量,因此视图助手的作用就在这里了.     ②流程: [1]首先,调用express模块,就像我们之前做的那样(事实上,不需要额外声明,当我们使用express框架的时候自然会调用它):   [2]按照正常情况,我们需要进行路由处理,当使用视图助手时,有一件很重要的事情,

mysql实例-mysql里实例的概念是什么意思?

问题描述 mysql里实例的概念是什么意思? 我是一个mysql初学者,在mysql中我们通常会遇到"实例"这个概念,我想知道"实例"的定义是什么?在mysql的英语文档中,""实例""的英语单词是什么? 解决方案 应该对应于instance.就是一个操作的数据库的代称. 解决方案二: 指多个mysql进程

建立Apache+PHP3+MySQL驱动动态网站

Apache是目前应用最广的Web服务器,PHP3是一种类似ASP的脚本语言,目前的发展趋势大有超过Perl之势,而MySQL是一个轻量级的数据库系统,特别是用于网站建设,这3个软件均是自由软件,是架设数据库驱动的动态网站的最佳排档. 本文只介绍这3个软件的安装,有关PHP和MySQL的编程和使用请见其他资料. 一.如何获得软件? 获得这3个软件包的方法很多,目前大多数Linux分发都捆绑了这3个软件包,如RedHat.本文介绍的安装方法是基于从这些软件的官方站点上下载获得的软件包进行的,针对R

如何用java在mysql里创建表头

问题描述 如何用java在mysql里创建表头 用java在mysql里创建表头,表头是从网页的table标签里获取的属性值.CS萌新求大大解决一下.O(∩_∩)O谢谢 解决方案 create table (字段)http://www.pudn.com/downloads553/sourcecode/java/detail2282083.htmlhttp://blog.csdn.net/rui_dlut/article/details/6758031

javascript-在js里动态添加图片是异步加载吗?

问题描述 在js里动态添加图片是异步加载吗? 在js里,如果动态添加图片,即 var img = new Image(); img.src = '......'; //图片地址假设是一组字符串数组里的某项,非ajax异步获取 body.appendChild(img); 假设我绑定了一个鼠标滚动事件,当鼠标滚动时就如上动态加载图片,这种模式是异步加载图片吗? 解决方案 是的,设置src本身是同步的,但是浏览器下载和显示图片是异步的. 解决方案二: 你是事件触发的,肯定是异步获取的,但是你这么写的