codecamp

视图操作

一、视图的定义

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

二、为什么使用视图

    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,免费阅读超1000+编程语言教程
取消
确定
目录

sqlserver

oracle

db2

mangodb

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }