天天看點

SQL-mysql視圖的前世今生

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

一 前言

本篇内容是關于視圖的一些概念,和使用,主要目的帶小夥伴們全面的了解視圖,而不是僅僅停留在簡單的使用上。

二 視圖

2.1 視圖的概念

視圖其實就是一張虛表,其本質上SQL的檢索語句,是以其不儲存任何的資料成分;我們使用視圖有什麼好處呢?

  • 簡化查詢SQL,直接對視圖進行查詢,不用管視圖具體生成的細節;
  • 可以使用表的部分成為視圖,保護資料,開放使用者權限時,可以隻開放視圖,而不開放實體表;
  • 修改資料結構,可以直接對已有的表建立視圖,使用不同的表名,字段名稱;

我們對視圖的操作隻能停留在查詢上,如果是單表生成的視圖還可以進行插入資料;如果是多表關聯生成的視圖,插入不會起作用;切記任何時候進行關聯的時候如果關聯3張表以上就是不符合規範,嚴重的拖累查詢性能,視圖也是如此,使用複雜的嵌套視圖和多表關聯也會極大的降低查詢性能;

2.2 視圖的規範

  • 視圖是虛表,其有表的部分特性;視圖名 唯一 ,與表名類似;
  • 如果非管理者使用者,建立視圖必須有建立權限;
  • 視圖本質是查詢語句,故視圖可以嵌套,可以與其它表進行聯結;
  • 視圖不能有索引和觸發器

2.3 視圖語句

小夥伴們要記得使用視圖之前要看看自己的MYSQL版本,5.0以上支援;

  • 建立視圖 與建立表類似 , create view 語句用于建立視圖
  • 顯示視圖建立語句 使用 show create view viewName ;
  • 删除視圖 使用語句 drop view viewName
  • 更新視圖 使用語句 create or replace view

2.4 視圖操作

我們的準備表如下

CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '訂單編号',
  `order_name` varchar(255) DEFAULT NULL COMMENT '訂單名稱',
  `create_time` datetime DEFAULT NULL COMMENT '建立時間',
  `year` year(4) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;           

準備資料如下

INSERT INTO `zszxz`.`order`(`id`, `order_name`, `create_time`, `year`) VALUES (1, '知識追尋者的訂單', '2020-03-04 11:01:25', 2019);
INSERT INTO `zszxz`.`order`(`id`, `order_name`, `create_time`, `year`) VALUES (2, '小天使的訂單', '2020-03-04 11:01:25', 2020);
INSERT INTO `zszxz`.`order`(`id`, `order_name`, `create_time`, `year`) VALUES (3, '流浪者的訂單', '2020-03-04 11:02:50', 2020);           

建立簡單的視圖示例如下,使用 order 表 的 id , order_name , year 三個字段組成視圖;as 後面就是查詢語句,也可以是子查詢,多表關聯等複雜的查詢語句;

create view `zszxz_order` as SELECT `id` , `order_name`, `year` from `order`
           

查詢視圖,其使用本質與查詢表一樣;示例如下

SELECT * from  `zszxz_order`           

向視圖中插入資料,插入的資料實際在實體表 order 表中切記;

INSERT INTO `zszxz_order`(`order_name`, `year`) VALUES ('小凡汐的訂單', 2020);           

删除視圖

drop view `zszxz_order`           

2.5 小結

視圖的本質上查詢語句,故可以對一些簡單的資料統計做成視圖是個不錯的選擇;其次如果是開放權限給第三方公司,使用視圖查詢部分實體表的資料作為開放的表也是對視圖的合理應用;最後,也可以将簡單的表聯結做成視圖,簡化開發;

由于視圖的本質是查詢語句,你可以了解為其前世就是查詢,今生就是虛表,徒有其“表”,名不副實,隻擁有表的部分功能;

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/live

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-06-18

本文作者:知識追尋者

本文來自:“

掘金

”,了解相關資訊可以關注“掘金”