MySQL<事務與預存程序>

來源:互聯網
上載者:User

標籤:層級   exist   back   where   行資料   procedure   案例   varname   並發控制   

事務與預存程序 交易管理

  事務的概念

    謂的事務就是針對資料庫的一組操作,它可以由一條或多條SQL語句組成,同一個事務的操作具備同步的特點,即事務中的語句要麼都執行,要麼都不執行。

  事務的使用

    開啟事務START TRANSACTION;

    執行SQL語句

    提交事務COMMIT;

    取消事務(復原)

  事務的提交

    事務中的動作陳述式都需要使用COMMIT語句手動提交,只有事務提交後其中的操作才會生效。

  事務的復原

    如果不想提交當前事務,可使用ROLLBACK語句取消當前事務。

    ROLLBACK語句只能針對未提交的事務執行復原操作,已提交的事務是不能復原的。

  事務的隔離等級

    REPEATABLE READ(可重複讀)

    READ UNCOMMITTED(讀未提交)

    READ COMMITTED(讀提交)

    SERIALIZABLE(可序列化)

事務的定義特性

  原子性

      原子性是指一個事務必須被視為一個不可分割的最小工作單元,只有事務中所有的資料庫操作都執行成功,才算整個事務執行成功

  一致性

      一致性是指事務將資料庫從一種狀態轉變為下一種一致的狀態。

  隔離性

      隔離性還可以稱為並發控制、可序列化、鎖等,當多個使用者並發訪問資料庫時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作資料所幹擾,多個並發事務之間要相互隔離。  

  持久性

      事務一旦提交,其所做的修改就會永久儲存到資料庫中,即使資料庫發生故障也不應該對其有任何影響。

      事務的持久性不能做到100%的持久,只能從事務本身的角度來保證永久性,而一些外部原因導致資料庫發生故障,如硬碟損壞,那麼所有提交的資料可能都會丟失。

預存程序的建立   什麼是預存程序

    預存程序就是一條或多條SQL語句的集合,當對資料庫進行一系列複雜操作時,預存程序可以將這些複雜操作封裝成一個代碼塊,以便重複使用,大大減少資料庫開發人員的工作量。

  建立預存程序

    CREATE PROCEDURE sp_name([proc_parameter])

    [characteristics…]routine_body

 

    CREATE PROCEDURE:為用來建立預存程序的關鍵字。

    sp_name:為預存程序的名稱。

    proc_parameter:為指定預存程序的參數列表。

    characteristics:用於指定預存程序的特性。

  變數的使用

    定義

      在MySQL中,變數可以在子程式中聲明,用於儲存資料處理過程中的值,這些變數的作用範圍在BEGIN…END程式中。

      DECLARE var_name[,varname]…date_type[DEFAULT value];

      var_name:為局部變數的名稱。

      DEFAULT value:子句給變數提供一個預設值,該值可以被聲明為一個常數或一個運算式。如果沒有DEFAULT子句,變數的初始值為NULL。

    使用SET語句為變數賦值

      SET var_name =

      expr[,var_name = expr]…;

 

    使用SELECT…INTO為一個或多個變數賦值

      SELECT col_name[…]

      INTO var_name[…] table_expr;

 

  定義條件和處理常式

    定義條件是指事先定義程式執行過程中遇到的問題

      DECLARE condition_name CONDITION FOR [condition_type];

      // condition_type的兩種形式:

      [condition_type]:

      SQLSTATE[VALUE] sqlstate_value|mysql_error_code

    處理常式定義了在程式執行過程中遇到問題時應當採取的處理方式,並且保證預存程序在遇到警告或錯誤時能繼續執行處理過程使用DECLARE語句定義

      DECLARE handler_type HANDLER FOR condition_value[,…] sp_statement

      handler_type:

      CONTINUE|EXIT|UNDO

      condition_value:

      |condition_name

      |SQLWARNING

      |NOT FOUND

      |SQLEXCEPTION

      |mysql_error_code

      handler_type:為錯誤處理方式,參數取值

      有3個:CONTINUE、EXIT和UNDO。

       CONTINUE:表示遇到錯誤不處理,繼續執行;

       EXIT:遇到錯誤馬上退出。

       UNDO:表示遇到錯誤後撤回之前的操作,MySQL中暫時不支援這樣的操作。sp_statement:參數為程式語句段,表示在遇到定義的錯誤時,需要執行的預存程序。

      condition_value:表示錯誤類型。

  游標的使用

    在編寫預存程序時,查詢語句可能會返回多條記錄,如果資料量非常大,則需要使用游標來逐條讀取查詢結果集中的記錄。游標是一種用於輕鬆處理多行資料的機制。

    聲明

      文法:DECLARE cursor_name CURSOR FOR select_statement

      樣本:DECLARE cursor_student CURSOR FOR select s_name,s_gender FROM student;

    使用

      文法:OPEN cursor_name FETCH cursor_name INTO var_name[,var_name]…

      樣本:FETCH cursor_student INTO s_name, s_gender;

    關閉

      CLOSE cursor_name

流程式控制制的使用

  預存程序中的流程式控制制語句用於將多個SQL語句劃分或組合成符合商務邏輯的代碼塊,MySQL中的流程式控制制語句有7個

  1、 IF語句

    文法格式如下:

    IF expr_condition THEN statement_list

    [ELSEIF expr_condition THEN statement_list]

    [ELSE statement_list]

    END IF

  2、CASE語句

    文法格式如下:

    CASE case_expr

         WHEN when_value THEN statement_list

         [WHEN when_value THEN statement_list]…

         [ELSE statement_list]

    END CASE

  3、 LOOP語句

    文法格式如下:

    [loop_label:]LOOP

    statement_list

    END LOOP [loop_label]

    4、LEAVE語句

    文法格式如下:

    LEAVE lable

  5、ITERATE語句

    文法格式如下:

    ITERATE lable

    6、REPEAT語句

    文法格式如下:

    [repeat_lable:] REPEAT

    statement_list

    UNTIL expr_condition

    END REPEAT[repeat_lable]

  7、WHILE語句

    文法格式如下:

    [[while_lable:] WHILE expr_condition DO

    Statement_list

    END WHILE [while_lable]

預存程序的使用   調用預存程序

    CALL sp_name([parameter[,…]])

    CALL:為調用預存程序的關鍵字。

    sp_name:為預存程序的名稱。

    Parameter:為預存程序的參數。

  查看預存程序

    1、使用SHOW STATUS語句

      CALL sp_name([parameter[,…]])

 

    2、使用SHOW CREATE語句

      SHOW CREATE{PROCEDURE|FUNCTION} sp_name

    3、information_schema.Routines表中查看

      SELECT * FROM  information_schema.Routines

      WHERE ROUTINE_NAME=‘CountProc1‘

      AND ROUTINE_TYPE=‘PROCEDURE‘\G

  修改預存程序

    ALTER {PROCEDURE|FUNCTION} sp_name[characteristic…]

    sp_name:表示預存程序或函數的名稱。characteristic:表示要修改預存程序的哪個部分, characteristic 的取值分為8部分。

  刪除預存程序

    DROP{ PROCEDURE|FUNCTION }[IF EXISTS] sp_name

    綜合案例--預存程序應用

MySQL<事務與預存程序>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.