mysql資料庫--檢視的簡介及使用,資料的備份與還原
阿新 • • 發佈:2018-11-26
檢視:
檢視: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伺服器的日誌檔案進行備份。
增量備份:指定時間段開始進行備份,備份資料不會重複,而且所有的操作都會備份(針對於很大的專案)