視圖操作

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

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

二、為什么使用視圖

    1.安全性。視圖可以隱藏一些數(shù)據(jù),當(dāng)我們數(shù)據(jù)表中有些字段 不方便透露的時(shí)候,我們可給視圖表創(chuàng)建字段來接受視圖查詢出來的字段。如下,我們創(chuàng)建了三個(gè)字段來接受查詢的結(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ù)處理上,因?yàn)槲覀円晥D的數(shù)據(jù)是來自基表的。視圖存儲(chǔ)的數(shù)據(jù)一般都是我們常用的字段,使用視圖就直接查詢出我們要用的數(shù)據(jù)。

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

三、如何使用視圖

    1.數(shù)據(jù)準(zhǔn)備

// 創(chuàng)建年級(jí)表
DROP TABLE IF EXISTS `t_class`;
CREATE TABLE `t_class` (
  `class_id` int(1) NOT NULL AUTO_INCREMENT COMMENT '班級(jí)編號(hào)',
  `class_name` varchar(10) NOT NULL COMMENT '班級(jí)名稱',
  `u_id` int(1) NOT NULL COMMENT '外鍵t_name中的u_id',
  PRIMARY KEY (`class_id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
// 插入測(cè)試數(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)建學(xué)生表 DROP TABLE IF EXISTS `t_name`;

CREATE TABLE `t_name` (

  `u_id` int(1) NOT NULL AUTO_INCREMENT COMMENT '編號(hào)',

  `u_name` varchar(20) NOT NULL COMMENT '昵稱',

  PRIMARY KEY (`u_id`)

) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; // 插入測(cè)試數(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í)摫?,表中并無數(shù)據(jù),所以我們是不能對(duì)存儲(chǔ)表做修改的,只能對(duì)基表進(jìn)行修改。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)