[MySQL光速入門]028 聊聊檢視

貓哥的技術部落格發表於2019-04-18

什麼是檢視

有結構沒結果的臨時表

  • 有結構意味著, 檢視是一個有行有列的二維表
  • 沒結果意味著, 檢視中並沒有真實存放的資料
  • 檢視中的資料, 從基表中獲取

檢視就是一個零庫存的經銷商

檢視的優點

  • 可以複用程式碼, 節省SQL語句, 以後可以直接操作檢視
  • 可以隔離表結構, 隱藏關鍵資料, 只向外提供必要的資料
  • 檢視主要針對查詢, 刪除檢視, 不會影響資料
  • 檢視可以把資料分級, 不同的許可權, 給不同的檢視(資料)

建立

建立檢視之前, 我們需要一些測試資料

image.png

image.png

drop database if exists new_library;
create database new_library CHARACTER set utf8;
use new_library;

drop table if exists readertype;

create table readertype(
	retypeid int not null primary key,
	typename VARCHAR(20) not null,
	borrowquantity int not null,
	borrowday int
);

drop table if exists reader;

create table reader(
	readerid char(10) not null PRIMARY key,
	readername VARCHAR(20) not null,
	readerpass VARCHAR(20) not null,
	retypeid int,
	readerdate datetime,
	readerstatus VARCHAR(4),
	FOREIGN key(retypeid) REFERENCES readertype(retypeid)
);

insert into readertype values
	(1,'學生',10,30),
	(2,'教師',20,60),
	(3,'管理員',15,30),
	(4,'職工',15,20);

insert into reader values
	('0016','蘇小東','123456',1,'1999-9-9','有效'),
	('0017','張明','123456',1,'2010-9-10','有效'),
	('0018','樑君紅','123456',1,'2010-9-10','有效'),
	('0021','趙清遠','123456',2,'2010-7-1','有效'),
	('0034','李瑞清','123456',3,'2009-8-3','有效'),
	('0042','張明月','123456',4,'1997-4-23','有效');
複製程式碼

建立一個檢視, 用來查詢讀者的詳細資訊, 包括使用者id, 姓名, 類別名稱, 借書數量

如果不使用檢視, 我們可以使用連表查詢

image.png

有了檢視, 我們就可以把複雜的查詢放入檢視之中

drop view if exists reader_detail;

create view reader_detail as 
select 
	readerid,readername,typename,borrowquantity 
from 
	reader,readertype 
where 
	reader.retypeid = readertype.retypeid;
複製程式碼

檢視檢視

因為檢視是一張虛擬表, 所有檢視錶的命令, 檢視都能用

show tables;
desc reader_detail;
show create table reader_detail;
複製程式碼

image.png

image.png

image.png

image.png

既然檢視是臨時表, 那必然會有結構檔案.frm

image.png

使用檢視

像表一樣查詢資料即可

image.png

修改檢視

可以使用alter 在原有檢視的基礎上, 加入欄位讀者狀態

image.png

也可以使用create or replace 在另一個檢視中, 增加讀者姓名欄位

image.png

刪除檢視

drop view 檢視名稱; -- 不能使用table
複製程式碼

image.png

也可以一次刪除多個

drop view 檢視1, 檢視2....;
複製程式碼

檢視重新命名

rename table 原來的名字 to 新名字;
複製程式碼

image.png

image.png

檢視中的資料, 可以增刪改嗎?

可以, 但是不推薦這麼做, 檢視主要是查詢資料時使用

MySQL檢視.png

因為不能操作多表, 所以我們新建一個單表的檢視

drop view if exists select_reader;

create view select_reader as select readerid,readername from reader;
複製程式碼

檢視進行insert操作

image.png

向檢視中插入一條資料

insert into select_reader values(123,'LUCY');
複製程式碼

image.png

檢視進行update操作

image.png

注意with check option

image.png

檢視進行delete操作

image.png

image.png

快速跳轉

相關文章