1. 程式人生 > >mysql資料庫--檢視的簡介及使用,資料的備份與還原

mysql資料庫--檢視的簡介及使用,資料的備份與還原

檢視:

檢視:view,是一種有結構(有行有列)但是沒結果(結構中不存在真實的資料)的虛擬表,虛擬表的結構來源不是自己定義,
而是從對應的基表中產生(檢視的資料來源)。

建立檢視:

基本語法:create  view  檢視名字  as  select  語句; -- select語句可以是普通查詢,可以是連線查詢,可以是聯合查詢
可以是子查詢。
建立單表檢視:基表只有一個
建立多表檢視:基表來源至少兩個
-- 檢視:單表+多表
create view my_v1 as select * from my_student;
create view my_v2 as select * from my_student;
create view my_v3 as select * from my_student
as s left join my_class c on s.c_id =c.id;  -- id重複
-- 多表檢視
create view my_v3 as 
select s.*,c.c_name,c.room from my_student as s 
left join my_class c 
on s.c_id =c.id;  -- id重複

在這裡插入圖片描述

檢視檢視:

檢視檢視:檢視檢視的結構,檢視是一張虛擬表,表的檢視方式都適用於檢視:show  tables  [like]/desc  檢視名字
/show  create  table  檢視名字;

在這裡插入圖片描述

檢視比表還是有關鍵字的區別:view,查看錶(檢視)的建立語句的時候可以使用view關鍵字。
-- 檢視檢視建立語句
show create view my_v3\G;

在這裡插入圖片描述

檢視一旦建立:系統會在檢視對應的資料庫資料夾下構建一個對應的結構檔案:frm檔案

在這裡插入圖片描述

使用檢視:

使用檢視主要是為了查詢,將檢視當做表一樣查詢即可。檢視的執行其實本質上就是執行封裝的select語句。

在這裡插入圖片描述

檢視的修改:

檢視本身不可以修改,但是檢視的來源是可以修改的,修改檢視:修改檢視本身的來源語句(select 語句)
alter  view  檢視名字  as  新的select  語句。
-- 修改檢視
alter view my_v1 as 
select id,name,age,sex,height,c_id from my_student;

在這裡插入圖片描述

檢視的刪除:

drop view  檢視名字;
-- 刪除檢視
drop view my_v4;
視圖裡面不儲存資料,可以刪除。

在這裡插入圖片描述

檢視的意義:

1.檢視可以節省SQL語句:將一條複雜的查詢語句使用檢視進行儲存,以後可以直接對檢視進行操作。
2.檢視可以保證資料安全,檢視操作主要是用來查詢的,如果對檢視結構進行刪除不會影響基表(相對安全)。
3.檢視往往是在大專案中使用,而且是多系統使用。可以對外提供有效的資料隱藏不想提供的資料,保證資料安全。
4.檢視可以對外提供友好型,不同的檢視提供不同的資料,對外好像就是專門設計的一樣。
5.檢視可以更好(容易)地進行許可權控制。

檢視資料操作:

試圖的確是可以進行資料寫操作的,但是有很多限制。將資料直接在檢視上操作。

新增資料:

資料新增就是直接對檢視進行資料新增。
1.多表檢視不可以新增資料
-- 多表檢視插入資料
insert into my_v3 values(null,'itcast0008','zsf','男',150,180,1,'php0326','D306');

在這裡插入圖片描述

2.可以向單表檢視插入資料:但是檢視中包含的欄位必須有基表中所有不能為空的欄位
-- 單表檢視插入資料,檢視不包含所有不允許為空的欄位(學號)
insert into my_v1 values(null,'張無忌',68,'男',174,2);

在這裡插入圖片描述

3.檢視是可以向基表插入資料的
-- 單表檢視插入資料
insert into my_v5 values(2,'PHP0326','D306');

在這裡插入圖片描述

刪除資料:

多表檢視不可以刪除資料

在這裡插入圖片描述

單表檢視可以刪除資料
-- 單表檢視刪除資料
delete from my_v2 where id = 4;

在這裡插入圖片描述

更新資料:

理論上無論單表還是多表檢視都可以更新資料。
-- 演示單表檢視更新資料
update my_v1 set c_id = 2 where id = 3;

在這裡插入圖片描述

多表檢視更新資料

在這裡插入圖片描述

更新限制:with  check  option,如果檢視在新增的時候限定了對某個欄位有限制,那麼再對檢視進行資料更新的時候系統會進行
驗證。要保證更新之後,資料依然可以被實體查詢出來,否則不讓更新。
-- 檢視:age欄位限制更新
-- 檢視的資料來源都是age大於30歲的
-- with check option:決定通過檢視更新的時候,不能將已經得到的age>30歲改為<30歲的
create view my_v4 as select * from my_student where age > 30 with check option;

-- 將檢視可以查到的資料改為<30
update my_v4 set age = 29 where id = 1;

-- 可以修改可以查到的資料(>30),保證檢視存在
update my_v4 set age = 36 where id = 7;

在這裡插入圖片描述

檢視演算法:

檢視演算法:系統對檢視以及外部查詢檢視的select語句的一種解析方式。
檢視演算法分為三種:
	undefined:(未定義)預設的,不是一種實際使用演算法,直接告訴系統沒有定義演算法,系統自身決定如何處理。
	temptable:臨時表演算法:系統應該先執行檢視的select語句,後執行外部查詢語句。
	merge:合併演算法,系統應該先將檢視對應的select語句與外部查詢檢視的select語句進行合併,然後執行(效率高:常態)

演算法指定:在建立檢視的時候。
create  algorithm  =  指定演算法  view  檢視名字  as  select  語句;
-- 獲取所有班級中最高的一個學生
-- 指定演算法建立檢視
create algorithm = temptable view my_v6 as select * from my_student order by height desc;
show create view my_v6\G;
select * from my_v6 group by c_id;

在這裡插入圖片描述
檢視演算法選擇:

如果檢視中的select語句中會包含一個查詢子句(五子句),而且很有可能順序比外部的查詢語句靠後,一定要使用演算法temptable,
其他情況下不用指定預設即可。

資料備份與還原:

備份:將當前已有的資料或者記錄保留,還原:將已經保留的資料恢復到對應的表中。
作用:1.防止資料丟失:被盜取,誤操作
2.保留資料記錄。
資料備份還原的方式有很多種:資料表備份,單表資料備份,SQL備份,增量備份。

資料表備份

不需要通過SQL來備份:直接進入到資料庫資料夾複製對應的表結構以及資料檔案,以後還原的時候直接將備份的內容放進去即可。
資料庫備份有前提條件:根據不同的儲存引擎有不同的區別。
儲存引擎:mysql進行資料儲存的方式主要有兩種:Innodb和myisam。(免費)

在這裡插入圖片描述

對比一下Innodb和myiasm:資料儲存方式

Innodb:只有表結構,資料全部儲存在ibdata1檔案中
myisam:表,結構和索引全部單獨分開儲存

在這裡插入圖片描述

這種檔案備份適合myisam儲存引擎,直接複製三個檔案即可。插入資料直接複製到test表進行檢視。
Innodb引擎不適用於這個方法。複製過來無效。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
單表資料備份:

每次只能備份一張表,只能備份資料表結構不可以備份。通常的使用:將表中的資料進行匯出到檔案。
備份:從表中選出一部分資料儲存到外部的檔案中(outfile)
select  */欄位列表  into  outfile  檔案所在路徑  from  資料來源;    -- 前提是外部檔案不存在
-- 單表資料備份
select * into outfile 'd:/server/temp/student.txt' from my_student;
備份完成之後開啟的時候不能直接開啟txt不然會導致編碼格式混亂無法還原,我使用的是EditPlus來開啟

在這裡插入圖片描述

高階備份:指自己制定欄位和行的處理方式
select  */欄位列表  into  outfile  檔案所在路徑  fields  欄位處理  lines  行處理  from  資料來源;
fields:欄位處理
	enclosed  by:欄位使用什麼內容包裹,預設是'',空字串
	terminated  by:欄位以什麼結束,預設是“\t”,tab鍵。
	escaped  by:特殊符號用什麼方式處理,預設是“\\”,使用反斜槓轉義
lines:行處理
	starting  by:每行以什麼開始,預設是'',空字串
	terminated  by:每行以什麼結束,預設是“\r\n”,換行符

在這裡插入圖片描述

資料還原:將一個在外部儲存的資料重新恢復到(如果表結構不存在,那麼sorry)

load data infile  檔案所在路徑  into  table  表名[(欄位列表)]  fields  欄位處理  lines  行處理; -- 怎麼備份怎麼還原

在這裡插入圖片描述

SQL備份:

備份的是SQL語句:系統會對錶以及表結構以及資料進行資料處理,變成對應的SQL語句,然後進行備份;
還原的時候只要執行SQL指令即可。(主要就是針對表結構)
備份:mysql沒有提供備份指令:需要利用mysql提供的軟體:mysqldump.exe
mysqldump.exe也是一種客戶端需要操作伺服器必須連線認證。

在這裡插入圖片描述

進行SQL備份
mysqldump -uroot -proot mydatabase my_student > D:/xfl/student.sql

在這裡插入圖片描述
開啟使用SQL備份的檔案之後發現全部是SQL語句:
在這裡插入圖片描述
整庫備份:

-- 整庫備份
mysqldump -uroot -proot mydatabase > D:/xfl/mydatabase.sql

在這裡插入圖片描述
在這裡插入圖片描述

SQL還原資料

方案1.使用mysql.exe客戶端還原
-- 還原資料:mysql客戶端還原
mysql -uroot -proot mydatabase < D:/xfl/student.sql

在這裡插入圖片描述
進行還原資料:

在這裡插入圖片描述

方案2:使用SQL指令還原
source  檔案所在路徑;
-- sql指令還原SQL備份
source D:/xfl/student.sql

在這裡插入圖片描述
在這裡插入圖片描述

SQL備份優缺點:

1.優點:可以備份結構
2.缺點:會浪費空間(額外的增加SQL指令)

增量備份:

不是針對資料或者SQL指令進行備份:是針對mysql伺服器的日誌檔案進行備份。
增量備份:指定時間段開始進行備份,備份資料不會重複,而且所有的操作都會備份(針對於很大的專案)