视图操作
视图是一个虚拟表,表中是无数据的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图的数据是来自与基表。
二、为什么使用视图
1.安全性。视图可以隐藏一些数据,当我们数据表中有些字段 不方便透露的时候,我们可给视图表创建字段来接受视图查询出来的字段。如下,我们创建了三个字段来接受查询的结果。
CREATE VIEW query_view(id,name,class) as SELECT B.u_id, B.u_name, A.class_name FROM t_class as A INNER JOIN t_name AS B ON A.u_id = B.u_id;
2.视图能简化用户操作。这可以让我们专心在数据处理上,因为我们视图的数据是来自基表的。视图存储的数据一般都是我们常用的字段,使用视图就直接查询出我们要用的数据。
3.视图对重构数据库提供了一定程度的逻辑独立性。数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全的支持。
三、如何使用视图
1.数据准备
// 创建年级表
DROP TABLE IF EXISTS `t_class`;
CREATE TABLE `t_class` (
`class_id` int(1) NOT NULL AUTO_INCREMENT COMMENT '班级编号',
`class_name` varchar(10) NOT NULL COMMENT '班级名称',
`u_id` int(1) NOT NULL COMMENT '外键t_name中的u_id',
PRIMARY KEY (`class_id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
// 插入测试数据
INSERT INTO `t_class` VALUES ('1', '高一', '1');
INSERT INTO `t_class` VALUES ('2', '高一', '1');
INSERT INTO `t_class` VALUES ('3', '高一', '1');
INSERT INTO `t_class` VALUES ('4', '高一', '1');
INSERT INTO `t_class` VALUES ('5', '高一', '1');
INSERT INTO `t_class` VALUES ('6', '高一', '1');
INSERT INTO `t_class` VALUES ('7', '高一', '1');
INSERT INTO `t_class` VALUES ('8', '高一', '1');
INSERT INTO `t_class` VALUES ('9', '高一', '1');
INSERT INTO `t_class` VALUES ('10', '高二', '4');
INSERT INTO `t_class` VALUES ('11', '高二', '4');
INSERT INTO `t_class` VALUES ('12', '高二', '4');
INSERT INTO `t_class` VALUES ('13', '高二', '4');
// 创建学生表
DROP TABLE IF EXISTS `t_name`;
CREATE TABLE `t_name` (
`u_id` int(1) NOT NULL AUTO_INCREMENT COMMENT '编号',
`u_name` varchar(20) NOT NULL COMMENT '昵称',
PRIMARY KEY (`u_id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
// 插入测试数据
INSERT INTO `t_name` VALUES ('1', '王五1');
INSERT INTO `t_name` VALUES ('2', '李四');
INSERT INTO `t_name` VALUES ('3', '李四');
INSERT INTO `t_name` VALUES ('4', '李四');
INSERT INTO `t_name` VALUES ('5', '李四');
INSERT INTO `t_name` VALUES ('6', '李四');
INSERT INTO `t_name` VALUES ('7', '李四');
INSERT INTO `t_name` VALUES ('8', '李四');
INSERT INTO `t_name` VALUES ('9', '李四');
INSERT INTO `t_name` VALUES ('10', '李四');
INSERT INTO `t_name` VALUES ('11', '李四');
2.创建视图
// 创建视图语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW [db_name.]view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
CREATE VIEW query_view(id,name,class) as SELECT B.u_id, B.u_name, A.class_name FROM t_class as A INNER JOIN t_name AS B ON A.u_id = B.u_id;
3.删除视图
DROP VIEW IF EXISTS query_view;
4.使用视图
SELECT * FROM query_view;
5.查询视图结构
DESCRIBE query_view;
6.显示视图状态
SHOW TABLE STATUS LIKE 'query_view';
7.修改视图
视图是一张虚表,表中并无数据,所以我们是不能对存储表做修改的,只能对基表进行修改。