1. 程式人生 > >mysql學習之路_事物_儲存過程_備份

mysql學習之路_事物_儲存過程_備份

資料備份與還原

備份:將當前已有的資料保留。

還原:將已經保留的資料恢復到對應表中

為什麼要做資料備份

1,防止資料丟失,被盜,誤操作

2,保護資料記錄

資料備份還原方式有多種:資料表備份

                    單表資料備份

                    Sql備份

                    增量備份

資料表備份:

資料不需要sql來備份,直接進入到資料庫資料夾複製對應結構以及資料檔案,以後還原的時候,直接將備份的內容放入即可

資料表備份有前提條件:根據不同的儲存引擎有不同的區別。

儲存引擎:mysql進行資料儲存的方式主要有兩種:innodb,myisam(免費)

Innodb:只有表結構,資料儲存到ibdatal資料夾中

Myisam:表,資料和索引單獨儲存

Myisam:Fim是結構,myd是資料,myi是索引

這種備份通常適用於myisam儲存引擎直接複製三個資料夾即可,放到對應的資料庫可以使用,innodb可以複製但是不能使用。 單表資料備份

每次只能備份一張表,只能備份資料(表結構不能備份)

通常使用:將表中的資料進行到出到檔案

備份:從表中選出一部分資料儲存到外部檔案中。

Select */欄位列表 into outfile 檔案路徑 from 資料來源;–前提是外部檔案不存在

Select * into outfile “d:new.txt” from myfirst;

高階備份:自己制定欄位和行的處理方式:

Select */欄位列表 into outfile 檔案路徑 fields 欄位處理 lines行處理 from 資料來源。

Fileds :欄位處理

   Enclosed by :欄位使用什麼內容包裹,預設是:空字串

   Terminate by:欄位以什麼結束,預設是“\t”“tab”鍵

   Escaped by:  特殊字元用什麼方式處理,預設是“\\”使用反斜槓轉譯

Lines :行處理

   Start by:每行以什麼開始預設是空字串

   Terminate by: 每行以什麼結束,預設是“\r\n” 換行符

------------指定備份處理方式

Select * into outfile “D:new.txt”

Fields enclosed by “ ”–欄位處理

Lines starting by “ ”–行處理

From my_class;

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

Load data infile 檔案路徑 into

Table 表名[欄位列表]

Fileds 欄位處理

Lines 行處理

怎麼備份怎麼還原。

例:

Load data infile “d:new.txt”

Into table my_class

Fields encosed by” ”

Lines starting by ‘start ’; Sql備份:

備份sql語句:系統會對錶結構以及資料進行資料處理,變成對應的sql語句然後進行備份;還原度時候執行SQL指令即可(主要是針對表結構)

備份:

Mysql 沒有提供指令需要利用mysql提供的軟體mysqlDump.exe

Mysqldump.exe也是一種客戶端,需要操作伺服器,必須連線認證。

Mysqldump / mysqldump.exe -u -p 資料庫名字[資料表名字1資料表名字2]>外部檔案目錄(建議使用.sql結尾) Sql還原資料

兩種方式還原,

1,使用mysql.exe客戶端還原:mysql.exe / mysql -u -p 資料庫名字 <備份檔案目錄

2,Sql指令還原sql備份 source備份檔案所在路徑 Sql備份優缺點

1,優點,可以備份結構,儘管結果不管過程

2,確定,會浪費空間(額外增加sql指令)

增量備份(大專案用增量備份)

不是針對資料或者sql指令進行備份:是針對mysql伺服器日誌檔案備份。

增量備份:指定時間開始進行備份,備份資料不會重複,而且所有的操作都會備份。 回顧

外來鍵:關聯關係(表與表之間,表中欄位指向另外一張表的主鍵)

 條件:欄位型別一致,儲存引擎必須是innodb

 約束:子表約束,不能插入父表不存在的記錄

       父表約束,三種約束模式。

 (district ,cascade,setnull)

  On delete set null on update cascade;

聯合查詢:union 多表合併和單表不同查詢條件,聯合查詢使用order by:select語句使用括號:還必須配合:limit

子查詢:查詢語句中有查詢語句,

分類:按位置:from子查詢,where子查詢,exists子查詢

  按返回結果:表量子查詢,列子查詢,行子查詢,表長查詢。

檢視:view

節省SQL語句:安全級別

本質:虛擬表,有結構,無資料

檢視資料操作:多表只能改,單表可以增加(有限制)

檢視演算法:undifined 未定義

      Temptable 臨時表

      Merge 合併

檔案備份與還原

  檔案備份:儲存引擎(myisam)

  單表資料備份:只能備份資料

  Sql備份:備份sql指令(mysqldump.exe客戶端)

  增量備份:備份系統日誌檔案。

事物:

一系列要發生的聯續的操作 事物安全:

一種保護連貫操作同時滿足實現的機制

事物安全的意義:保證資料操作的完整性。

事物操作:分為兩種:自動事物(預設的),手動事物。 手動事物:

操作流程

1,開啟事物:告訴系統所有作業系統(寫)不要寫入到資料表,先存放到事物日誌。

Start transaction;

2,進行事物操作:一系列操作

3,關閉事物:選擇性將日誌檔案中操作的結果同步到資料表(同步儲存)或者說位元組清空事物日誌。

Commit :提交事物,同步資料表(操作成功)

Rollback :回滾事物,直接清空日誌表(操作失敗)。 事物原理

事物開啟之後,所有操作會儲存到事務日誌,事務日誌只有得到commit命令才會同步到資料表。

其他任何情況都會清空(rollback,斷電,斷開連線)。

在這裡插入圖片描述

回滾點

在某個成功完成之後,有可能成功,也有可能失敗,但是不管成功還是失敗,前面的操作已經成功,在當前成功的位置設定一個點,可以供後續失敗操作返回該位置,而不是返回所有操作。這個點稱之為回滾點

語法:sava point 回滾點名字;

回到回滾點語法:rollback to 回滾點名字 自動事物處理:

在mysql中預設的是自動事物處理,使用者操作完全會立即同步到資料表

自動事物:系統通過autocommit控制:show variables like ‘autocommit’;

關閉自動提交事物:set autocommit=off/0;

自動關閉之後,需要手動選擇處理:commit,rollback。

注:通常使用自動事物 事物特性

ACID四大特性

A:Atonic原子性;事物的整個操作是一個整體,不可分割要麼全部成功要麼全部失敗。

C:Consistency一致性:事物操作前後,書記表中資料沒有變化。

I: Isolation 隔離性,事物操作是相互隔離不受影響的

D:Durability 永久性,資料一旦提交不可改變。 鎖機制

Innodb預設是行鎖,但是事物如果是在操作過程中,如果沒有使用到索引,那麼系統會自動全表檢索,自動升級為表鎖。

行鎖:只有當前行被鎖住,別的使用者不能操作

表鎖:整張表被鎖住,別的使用者不能操作 變數:

變數分為兩種,系統變數和自定義變數 系統變數:

系統定義好的,大部分使用者更本不需要使用系統變數,系統變數是用來控制伺服器表現的:如autoCommit 等atuo_increament_increment

檢視系統變數show variables;檢視所有系統變數,檢視具體變數值,任何一個有資料返回的內容都是由select 檢視。

[email protected]@變數名 修改系統變數

修改系統變數分為兩種方式:會話級別和全域性級別

會話級別:臨時修改,當次連線有效 set 變數名=值

全域性級別:一次修改,永久生效(所有客戶端生效)set global 變數名=值

例:set global autocommit=0;

如果對方(其他)客戶端已經連上伺服器,那麼當次修改無效,要退出重新登入才會有效

自定義變數:

定義變數

系統為了區分系統變數,規定使用者自定義變數,必須使用一個@符號 [email protected]變數名=值

使用者定義變數類似於系統變數檢視 Select @變數名;

在sql中“=”會預設的當做比較符號處理。Mysql為了區分比較和賦值的概念:重新定義一個新的賦值符號“:=”

mysql允許從資料表中獲取資料然後賦值給變數(兩種方式)

1,變賦值變檢視結果

Select @變數名:=欄位名 from 資料來源;–從欄位取賦值變數名如果使用=會變成比較

2,只有賦值,不看結果:要求很嚴格,資料記錄最多允許獲取一條:mysql不支援陣列

select 欄位列表 from表名 into 變數列表

注:所有自變數都是會話級別;當前客戶端當次連線有效

所有自定義變數不區分資料庫(會話級別) 觸發器

Trigger 實現為某張表繫結一段程式碼,當表中的某些內容發生改變的時候(增刪改)

   系統會自動觸發程式碼執行。

觸發器:事件型別,觸發物件,觸發時間

事件型別:三種(增刪改)insert ,delete,update

觸發時間:前後,before ,after

觸發物件:表中每一條記錄(行)

一張表只能有一種觸發時間的一種型別的觸發器,最多一張表能有6個觸發器 建立觸發器

在mysql高階結構中,沒有大括號,都是用對應的字母符號代替 --臨時修改語句結束符

觸發器的基本語法

Delimiter 自定義符號:後續程式碼碰到自定義符號結束

Create trigger 觸發器名字 觸發時間(事件),觸發事件(型別), on 表名 for each row

Begin --代表大括號:開始

–裡面是觸發器內容:每行必須使用語句結束符;分號

End --代表大括號:結束

自定義符號

Delimiter; --將臨時符號修改過來 檢視觸發器:

Show trigger [like ‘patten’];

檢視觸發器建立語句

Show create trigger 觸發器名字

所有的觸發器都會儲存在一張表中

information_Schema.trigger 使用觸發器

觸發器:不需要手動觸發,而是當某種情況發生時會自動觸發 修改觸發器&&刪除觸發器

Drop trigger 觸發器名字; 觸發器記錄;

不管觸發器是與否觸發,只要當某種操作準備執行:系統就會將當前操作的記錄的當前狀態和即將執行之後新的狀態分別保留下來,供觸發器使用。

其中要操作的當前狀態儲存到old中,操作之後的可能形態儲存到new,刪除的時候沒有new的,插入的時候沒有old。

Old與new都是代表記錄本身,任何一條記錄除了有資料,還有欄位名字。

使用方式:old欄位/new 欄位名(new代表假設發生之後的結果)

如果觸發器內部只有一條要執行的sql指令,可以省略大括號(begin與end)

Create trigger 觸發器名字 觸發時間 時間型別 on 表名 for each row 一條sql指令;

觸發器:可以很好的協調內部的資料處理順序和關係,但是從php角度出發,觸發器會增加資料庫維護難度,所以較少使用觸發器。 程式碼執行結構

三種,順序結構,分支結構,迴圈結構。 分支結構:

事先準備多個程式碼塊按照條件選擇性執行某段程式碼。

在mysql中只有if分支

If 判斷條件 then

– 滿足條件執行的程式碼

Else

– 不滿足

End if 迴圈結構:

某段程式碼在指定條件執行重複執行

While (迴圈)

While 條件判斷 do

      --滿足條件執行程式碼

      --變更迴圈條件

End while;

迴圈控制:在迴圈內部判斷和控制

Mysql沒有對應continue 與break

Iterate:迭代 類似於continue,後面的程式碼不執行,迴圈重新來過

Leave:離開類似於break,迴圈結束

迴圈名字:while條件do

  --迴圈體

  --控制

Leave/iterate 迴圈名字

End while; 函式

將一段程式碼塊分裝到一個結構中,在需要執行程式碼塊的時候,呼叫結構執行即可;

函式分為兩類:系統函式和自定義函式 系統函式

系統定義好的函式直接呼叫即可任何函式都有函式返回值因此函式的呼叫是通過select 呼叫,mysql中字串是基本操作單位名稱(字元)

subString :字串擷取(字元為單位)

Select subString(@name ,1,1)

Set @name=”您好”;

擷取位置從1開始:mysql中字串下表從1開始擷取單位為字元

Char-length:字串長度

Length:位元組長度

Instr:判斷字串是否在某個具體的字串存在

Lpad:左填充。將字串按照某個指定的填充方式填充到指定長度(字元)

Insert:替換,找到目標位置,指定長度字串替換成目標字串

Strcmp:compare,字串比較 自定義函式

函式:函式名,引數列表(形參與實參)

返回值,函式體(作用域)

建立函式:create function 函式名(形參列表)return 資料型別 --規定返回的資料型別

Begin

—函式體

–返回值:return型別(指定資料型別)

End

自定義函式與系統函式除錯方式是一樣的

Select 函式名([實參列表]) 檢視函式

檢視所有函式:show function status\G

檢視函式建立語句:show create function 函式名

刪除函式

Drop

Function

函式名

函式引數

引數:定義時叫形參,呼叫時叫實參(實參可以使數值,可以使變數)

形參:指定資料型別

Function 函式名稱(形參名字 欄位型別) returns 資料型別

注:任何變數要修改必須是使用set關鍵字 作用域:

Mysql 中作用域與js的作用域一樣全域性變數可以向任何地方使用,區域性變數只能在函式內部使用

全域性變數:使用set關鍵字定義,使用@符號標誌

區域性變數:使用declare關鍵字宣告沒有@符號。

所有區域性變數宣告,必須是在函式體開始之前 儲存過程

儲存過程:過程procedure是一種用來處理資料的方式(增刪改)

儲存過程是一種沒有返回值的函式 建立過程

Create produce 過程名字(引數列表)

Begin

–過程體

End

檢視過程:關鍵字procedure

Show procedure statue [like ‘pattern’];

檢視過程建立語句:show create procedure 過程名;

呼叫過程:過程沒有返回值,select語句不能訪問

過程有一個專門的呼叫關鍵字:call

Call 過程名。

修改過程&刪除過程

過程只能刪除不能修改

Drop procedure 過程名;

Out與intout 是一種引用型別,內部修改會影響到外部。 過程引數

函式的引數需要型別指定,過程比函式跟嚴格

過程需要自己的型別限定(三種)

In:資料只能是從外部傳入內部使用(值傳遞)可以使數值,可以是變數。

Out:只允許過程內部使用(不用外部資料)給外部使用(引用傳遞:外部資料會被清空才進入到內部):只能是變數。

Inout:外部可以在內部使用,顳部修改可以給外部使用,典型的引用傳遞;只能傳變數。 基本使用

Create procedure 過程名 (in 形參名字,資料型別,out 形參名字 資料型別,inout 形參名字 資料型別)

注:呼叫過程名,inout,out必須是變數

儲存過程對於變數的操作(返回)是滯後的,是在儲存過程呼叫結束的時候,才會將內部修改的值賦值給外部傳入的變數。

Mysql基礎學習到此結束謝謝大家