1. 程式人生 > 其它 >Markdown語法_20201226_第一天

Markdown語法_20201226_第一天


title: MySQL檢視 #標題
tags: MySQL #標籤
categories: MySQL # 分類


本篇博文主要介紹MySQL資料庫中檢視的概念!

一、檢視

1.1 檢視概述

一張虛表,和真實的表一樣。檢視包含一系列帶有名稱的行和列資料。檢視是從一個或多個表中匯出來的,可以通過insert、update、delete來操作檢視。當通過檢視看到的資料被修改時,相應的表中的資料也會發生變化。同時元表發生變化,則這種變化可以自動反映到檢視中。

1.2 檢視的優點

  • 簡單化:看到就是想要的。檢視不僅可以簡化使用者對資料的理解,也可簡化操作。經常被使用的查詢可以製作成一個檢視;
  • 安全性:通過檢視使用者只能查詢和修改所見到的資料,資料庫中的其他資料看不見也取不到。資料庫授權命令可以讓每個使用者對資料庫的檢索限制到特定的資料庫物件上,但不能授權到資料庫特定的行、列上;
  • 邏輯資料獨立性:檢視可以幫助使用者遮蔽真實表結構變化帶來的影響;

1.3 檢視與表的區別及聯絡

檢視與表的區別

  • 檢視是已經編譯好的SQL語句,是基於SQL語句的結果及的視覺化的表,而表不是;
  • 檢視沒有實際的物理資料,而表有;
  • 表是內容,檢視是視窗;
  • 表和檢視雖然都佔用物理空間,但是檢視只是邏輯概念存在,而表可以及時對資料進行修改,但是檢視只能用建立語句來修改;
  • 檢視是檢視資料表的一種方法,可以查詢表中某些欄位構成的資料,只是一些SQL語句的集合。從安全形度來說,檢視可以防止使用者接觸資料表,因此不知道表結構;
  • 表屬於全域性模式中的表,是實表。而檢視屬於區域性模式的表,是虛表;
  • 檢視的簡歷和刪除隻影響檢視本身,二不影響對應表的基本表;

檢視與表之間的聯絡

  • 檢視是在基本表之上建立的表,它的結果和內容都來自於基本表,它依賴基本表存在而存在;
  • 一個檢視可以對應一個基本表,也可對應多個基本表;
  • 檢視是基本的抽象和邏輯意義上建立的關係;

二、檢視的基本操作

2.1 建立單表檢視

mysql> create table test(quantity int,price int);
#建立表
mysql> insert into test values(3,50);
#插入資料
mysql> create view view_test as select quantity,price,quantity*price as total from test;
#建立檢視
mysql> select * from view_test;
+----------+-------+-------+
| quantity | price | total |
+----------+-------+-------+
|        3 |    50 |   150 |
+----------+-------+-------+
#檢視檢視中的內容

2.2 建立多表檢視

mysql> create table student (
    -> s_id int(3) primary key,
    -> s_name varchar(30),
    -> s_age int(3),
    -> s_sex varchar(8) );
mysql> create table stu_info (
    -> s_id int(3),
    -> class varchar(50),
    -> addr varchar(100) );
#建立基本表
mysql> insert into stu_info values
    -> (1,'erban','anhui'),
    -> (2,'sanban','chongqing'),
    -> (3,'yiban','shangdong');
#插入資料
mysql> create view stu_class(id,name,class) as
    -> select student.s_id,student.s_name,stu_info.class
    -> from student,stu_info where student.s_id=stu_info.s_id;
#建立檢視
mysql> desc stu_class;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(3)      | NO   |     | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
| class | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
#檢視檢視的結構
mysql> show table status like 'stu_class'\G;
#檢視檢視的基本資訊
mysql> show create view stu_class\G;
#檢視檢視的詳細資訊
mysql> select * from information_schema.views\G;
#直接查詢information_schema庫中的views表,來檢視所有的檢視
mysql> select * from information_schema.views where table_schema = 't1';
#where後面指定一個庫名,也就是檢視t1庫中的所有檢視

2.3 修改檢視

① 方式一
mysql> create or replace view view_test as select * from test;
#建立檢視
mysql> select * from view_test;
#檢視檢視
+----------+-------+
| quantity | price |
+----------+-------+
|        3 |    50 |
+----------+-------+
② 方式二
mysql> alter view view_test(abc) as select quantity from test;
#修改時指定檢視的列名
mysql> desc view_test;
#檢視修改後的表結構
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| abc   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
mysql> select * from view_test;
#檢視修改後的檢視
+------+
| abc  |
+------+
|    3 |
+------+

2.5 更新檢視

① update指令更新
mysql> select * from test;
+----------+-------+
| quantity | price |
+----------+-------+
|        3 |    50 |
+----------+-------+
mysql> select * from view_test;
+------+
| abc  |
+------+
|    3 |
+------+
#查看錶以及檢視的資料,其中quantity對應檢視的abc欄位
mysql> update view_test set abc = 5;
#更新檢視
mysql> select * from test;
#檢視更新後的表
+----------+-------+
| quantity | price |
+----------+-------+
|        5 |    50 |
+----------+-------+
mysql> select * from view_test;
#檢視更新後的檢視
+------+
| abc  |
+------+
|    5 |
+------+
② insert指令更新
mysql> select * from test;
#查看錶資料
+----------+-------+
| quantity | price |
+----------+-------+
|        5 |    50 |
+----------+-------+
mysql> select * from view_test;
#檢視檢視資料
+------+
| abc  |
+------+
|    5 |
+------+
mysql> insert into test values(3,5);
#向表中插入資料
mysql> select * from view_test;
#檢視更新後的檢視資料
+------+
| abc  |
+------+
|    5 |
|    3 |
+------+
mysql> select * from test;
#檢視更新後表資料
+----------+-------+
| quantity | price |
+----------+-------+
|        5 |    50 |
|        3 |     5 |
+----------+-------+
③ delete指令刪除表資料
mysql> create view view_test2(quantity,price,total) as select quantity,price,quantity*price from test;
#建立新的檢視
mysql> select * from view_test2;
#檢視檢視內容
+----------+-------+-------+
| quantity | price | total |
+----------+-------+-------+
|        5 |    50 |   250 |
|        3 |     5 |    15 |
+----------+-------+-------+
mysql> delete from view_test2 where price = 5;
#刪除檢視的資料
mysql> select * from view_test2;
+----------+-------+-------+
| quantity | price | total |
+----------+-------+-------+
|        5 |    50 |   250 |
+----------+-------+-------+
mysql> select * from test;
+----------+-------+
| quantity | price |
+----------+-------+
|        5 |    50 |
+----------+-------+
#檢視更新後的檢視、表資料

2.6 刪除檢視

mysql> drop view view_test2;
#刪除指定檢視