视图操作

2018-01-06 01:02 更新
一、视图的定义

    视图是一个虚拟表,表中是无数据的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图的数据是来自与基表。

二、为什么使用视图

    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.修改视图

视图是一张虚表,表中并无数据,所以我们是不能对存储表做修改的,只能对基表进行修改。



以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号