mysql 添加视图效率_MySQL 利用视图来提高开发效率

视图是MySQL中的虚拟表,用于简化复杂的查询操作。通过创建视图,可以将多表关联的查询结果集保存为一个视图表,方便后续查询。例如,创建tb_view_ssp_member_auth视图,整合tb_ssp_member_auth、tb_user_center和tb_ssp_member_auth_role表的信息,使应用层只需查询视图即可获取所需数据,降低了开发难度并提高了查询速度。
摘要由CSDN通过智能技术生成

关于视图的定义

《SQLite权威指南》是这么定义的,视图即是虚拟表,也称为派生表,因为它们的内容都派生自其它表的查询结果。虽然视图看起来感觉和基本表一样,但是它们部署基本表。基本表的内容是持久的,而视图的内容是在使用过程中动态产生的。

简单的理解为,视图就是通过一条SELECT语句执行后返回的结果集作为视图表的数据,即create view 视图表名 as select 语句,是对若干张基本表的引用。

一般视图表在命名时,会在其中加上view,另外表名通常会有前缀(如:tb_或者tbl_),因此,视图表的前缀为(tb_view_或者tbl_view_),然后,后面加上表名(注意:视图名不能与基本表名一样)。

为什么使用视图呢?

理由有:复杂查询的需求。我们在定义了一些基本表之后,经常会有一些复杂的关联查询,此时,我们就可以将复杂的关联查询结果集设置为视图。对于,应用层来说,视图的用法和基本表的用法一致。这样带来的好处有:复杂关联语句无需应用层向MySQL数据库发送,只要请求请求相应的视图,除了简化应用层的开发,还能够提升查询速度。

举个栗子:

创建用户信息表:tb_user_center

CREATE TABLE `tb_user_center` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`cuid` int(10) unsigned NOT NULL COMMENT '外部账号uid',

`username` varchar(50) NOT NULL COMMENT '注册用户名',

`staff_id` varchar(50) NOT NULL DEFAULT '' COMMENT '工号',

`mobile` varchar(50) NOT NULL COMMENT '注册手机号',

`password` char(32) NOT NULL,

`email` varchar(200) NOT NULL COMMENT '注册邮箱',

`status` tinyint(1) NOT NULL COMMENT '用户状态\n0未审核\n1正常\n2禁用',

`register_ip` varchar(15) DEFAULT NULL,

`last_login_time` int(10) NOT NULL DEFAULT '0',

`last_login_ip` varchar(15) DEFAULT NULL,

`ctime` int(10) NOT NULL COMMENT '注册时间',

`mtime` int(10) NOT NULL COMMENT '修改时间',

PRIMARY KEY (`id`),

UNIQUE KEY `unique_username` (`username`),

KEY `idx_status` (`status`)

) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8 COMMENT='注册用户表';

创建授权用户的表:tb_ssp_member_auth

create table tb_ssp_member_auth(

id int unsigned not null auto_increment comment '主键id',

uid int unsigned not null comment '用户id',

role_id tinyint unsigned not null default '0' comment '用户角色',

creator int unsigned not null comment '创建者',

auth_app_ids text charset utf8 not null comment '授权应用主键id列表,以逗号分隔',

auth_app_names text charset utf8 not null comment '授权应用名称列表,以逗号分隔',

mtime int unsigned not null comment '修改时间',

ctime int unsigned not null comment '修改时间',

primary key(id),

unique key idx_uid(uid)

)engine innnodb default charset=utf8 collate utf8_bin comment 'ssp媒体授权表';

创建角色表:tb_ssp_member_auth_role

create table tb_ssp_member_auth_role(

id int unsigned not null auto_increment comment '主键id',

name varchar(255) not null comment '角色名称',

creator int unsigned not null default '1' comment '创建者',

note text charset utf8 not null comment '描述',

mtime int unsigned not null comment '修改时间',

ctime int unsigned not null comment '创建时间',

primary key(id)

)engine innodb default charset=utf8 collate utf8_bin comment 'ssp媒体授权角色表';

由于表tb_ssp_member_auth_role中的用户信息和角色信息都是其主键id,我们需要管理相应的用户表和角色表,此时在应用层,需要执行如下MySQL操作:

select a.id, b.username, b.mobile, b.email, c.username as creator, d.name as role, a.auth_app_names as apps, from_unixtime(a.mtime) as mtime, from_unixtime(a.ctime) as ctime FROM  tb_ssp_member_auth a

left join tb_user_center b on a.uid = b.id

left join tb_user_center c on a.creator = c.id

left join tb_ssp_member_auth_role d on a.role_id=d.id;

这个语句左链接了4张表,这里,我们通过创建视图表:tb_view_ssp_member_auth,语句如下:

create view tb_view_ssp_member_auth as select a.id, b.username, b.mobile, b.email, c.username as creator, d.name as role, a.auth_app_names as apps, from_unixtime(a.mtime) as mtime, from_unixtime(a.ctime) as ctime FROM  tb_ssp_member_auth a

left join tb_user_center b on a.uid = b.id

left join tb_user_center c on a.creator = c.id

left join tb_ssp_member_auth_role d on a.role_id=d.id;

因此,在下次想查询tbl_ssp_member_auth表的具体信息,我们只要查询视图表tb_view_ssp_member_auth,示例语句如下:

select * from tb_view_ssp_member_auth;

总结:

视图是个好东西,特别是对于复杂关联查询时,能够大大简化应用程序的代码。需要特别注意的是对于视图的更新操作,如果只关联一张表的时候可以执行更新操作,当关联多张表时更新操作可能会失败

(具体视图学习例子参考:http://www..com/chenpi/p/5133648.html)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值