MySQL之视图

视图概述

视图是由数据库中的一个表或多个表导出的虚拟表,是一种虚拟存在的表,方便用户对数据的操作。

视图的概念

视图是一个虚拟表,是从数据库中一个或多个表中导出来的表,其内容由查询定义。同真实表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

视图的作用

1.简单。减少数据的操作,例如,有一张用户信息表,可以用视图只显示姓名、年龄、地址,而不显示用户的重要信息。
2.安全。视图的安全性可以防止未经授权用户查看特定的行或列,只能看到视图中的数据。
3.耦合。可以降低耦合,对数据表的重构,也相当于中间件。例如,有一张商品表和一张商品类别表,如果不创建视图,我们就要创建两个模型model;当我们用了视图后只需要创建一个模型model,这一个model就能解决。

创建操作

创建视图

  • 语法
create view [视图名称] as [内容]

例如:
一张商品表我们只需要它其中的一部分字段。

原表:

CREATE TABLE `goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `displayorder` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `uniacid` int(11) DEFAULT '0',
  `title` varchar(255) NOT NULL DEFAULT '' COMMENT '商品名称',
  `category` int(11) DEFAULT NULL COMMENT '分类ID ',
  `price` decimal(10,2) DEFAULT '0.00' COMMENT '商品原价',
  `auctionprice_max` decimal(10,2) DEFAULT '0.00' COMMENT '最高竞拍价',
  `auctionprice_min` decimal(10,2) DEFAULT '0.00' COMMENT '起拍价',
  `up_price` decimal(10,2) DEFAULT '0.00' COMMENT '单次加价',
  `goodsnum` int(11) NOT NULL DEFAULT '1',
  `units` varchar(255) NOT NULL DEFAULT '件' COMMENT '单位',
  `starttime` varchar(50) DEFAULT NULL COMMENT '起拍时间',
  `endtime` varchar(50) NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '结束时间',
  `thumb` varchar(255) DEFAULT '' COMMENT '缩略图',
  `description` varchar(1000) DEFAULT NULL COMMENT '描述',
  `content` text COMMENT '详情',
  `createtime` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',
  `status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '状态',
  `deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '是否已删除',
  `goodsid` int(11) NOT NULL DEFAULT '0' COMMENT '商品ID',
  `goodssn` varchar(50) DEFAULT NULL COMMENT '商品条码',
  `upnum` int(11) DEFAULT NULL COMMENT '最高加价次数',
  `merchid` int(11) DEFAULT '0',
  `up_reward` decimal(10,2) DEFAULT '0.30' COMMENT '加价奖励',
  `upper_reward` decimal(10,2) DEFAULT NULL COMMENT '成交后直推奖励',
  `margin` tinyint(3) unsigned NOT NULL DEFAULT '50' COMMENT '押金比率',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

一般不创建视图的查询如下

select id,title,price from goods;

创建视图

create view view_goods as select id,title,price from goods;

查询视图(结果等同余select id,title,price from goods;的查找)

select * from view_goods;

注意
当我们创建视图的时候,如果select中有查询条件,并且是需要该条件实在视图中起作用,那么就必需加上校验。

例如:

create view view2_goods as select id,title,price from goods where id>10;

当我们向视图view2_goods中插入数据时,id小于等于10仍然会成立。因为我们并没有在创建视图的时候对条件进行校验。

修改后,再插入id小于等于10的数据就不会成功,修改如下

create view view2_goods as select id,title,price from goods where id>10 with check option;

向视图中插入数据和对普通表的插入是一样的。

insert into goods(id,title,price) values(11,'手机壳',12.5);

删除视图

  • 语法
drop view [视图名称]

例如:

drop view view_goods;

适合的项目

oa,erp;电商

创建的什么视图不能进行新增或是修改

在创建视图时,包含了以下几条的都不能对创建的视图进行新增或是修改
1.有聚合函数
2.包含子查询
3.有JOIN的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值