視圖操作

2018-01-06 01:02 更新
一、視圖的定義

    視圖是一個虛擬表,表中是無數(shù)據(jù)的,其內(nèi)容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫中以存儲的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來自由定義視圖的查詢所引用的表,并且在引用視圖時動態(tài)生成。視圖的數(shù)據(jù)是來自與基表。

二、為什么使用視圖

    1.安全性。視圖可以隱藏一些數(shù)據(jù),當我們數(shù)據(jù)表中有些字段 不方便透露的時候,我們可給視圖表創(chuàng)建字段來接受視圖查詢出來的字段。如下,我們創(chuàng)建了三個字段來接受查詢的結(jié)果。

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.視圖能簡化用戶操作。這可以讓我們專心在數(shù)據(jù)處理上,因為我們視圖的數(shù)據(jù)是來自基表的。視圖存儲的數(shù)據(jù)一般都是我們常用的字段,使用視圖就直接查詢出我們要用的數(shù)據(jù)。

    3.視圖對重構(gòu)數(shù)據(jù)庫提供了一定程度的邏輯獨立性。數(shù)據(jù)的物理獨立性是指用戶的應用程序不依賴于數(shù)據(jù)庫的物理結(jié)構(gòu)。數(shù)據(jù)的邏輯獨立性是指當數(shù)據(jù)庫重構(gòu)造時,如增加新的關(guān)系或?qū)υ械年P(guān)系增加新的字段,用戶的應用程序不會受影響。層次數(shù)據(jù)庫和網(wǎng)狀數(shù)據(jù)庫一般能較好地支持數(shù)據(jù)的物理獨立性,而對于邏輯獨立性則不能完全的支持。

三、如何使用視圖

    1.數(shù)據(jù)準備

// 創(chuàng)建年級表
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;
// 插入測試數(shù)據(jù)

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');

// 創(chuàng)建學生表 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; // 插入測試數(shù)據(jù)

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.創(chuàng)建視圖

// 創(chuàng)建視圖語法
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.查詢視圖結(jié)構(gòu)

DESCRIBE query_view;

    6.顯示視圖狀態(tài)

SHOW TABLE STATUS LIKE 'query_view';

    7.修改視圖

視圖是一張?zhí)摫恚碇胁o數(shù)據(jù),所以我們是不能對存儲表做修改的,只能對基表進行修改。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號