1. 程式人生 > >關系型數據庫---MySQL---事務

關系型數據庫---MySQL---事務

bold 存儲 transacti inno pan zab serializa ble 提交

1、概述

  1.1  事務:在對業務相關的一系列數據進行操作時,需要保證數據操作的完整性(要麽全部成功、要麽全部失敗);

  1.2  MySQL中支持事務的存儲引擎是:Innodb;

  1.3  事務用來管理insert、update、delete語句;

  1.4  事務必須滿足的4個條件(ACID):

      1.1.1  Atomicity(原子性)

           一個事務的所有操作,要麽全部成功、要麽全部失敗

      1.1.2  Consistency(一致性)

           在事務開始之前、事務結束之後,數據庫的完整性沒有遭到破壞

      1.1.3  Isolation(隔離性)

           數據庫允許多個並發事務同時對數據進行讀寫和修改,隔離性可以防止多個事務執行時由於交叉執行而產生數據的不一致;

           事務的隔離級別:讀未提交read uncommitted、讀提交read committed、可重復讀repeatable read、串行化Serializable;

      1.1.4  Durability(持久性)

            事務處理完成後,對數據的修改是永久性的;

2、事務控制語句

  begin(start transaction):      顯示開啟事務

  commit(commit work):        事務提交(事務提交後對數據進行的修改稱為永久性)

  rollback(rollback work):        事務回滾(撤銷之前對數據庫的所有操作)

  savepoint 保存點名稱:          在事務中創建一個保存點(一個事務中可有多個savepoint)

  release savepoint 保存點名稱:      刪除一個事務中的保存點(如果事務中不存在保存點,會拋出異常)

  rollback to 保存點名稱:        把事務回滾到保存點

  set transaction:            設置事務的隔離級別(Innodb存儲引擎支持的隔離級別:讀未提交read uncommitted、

                       讀提交read committed、可重復讀repeatable read、串行化Serializable)

  set autocommit=0          禁止事務自動提交(關閉自動提交後,從下一條指令開始開啟新的事務,需要使用commit或rollback結束該事務)

  set autocommit=0          開啟事務自動提交

3、案例

  【註意】:

      MySQL默認事務是自動提交的、通過begin或者set autocommit=0來禁止事務自動提交;

//每個命令後必須加分號,不然報語法錯誤
BEGIN
; INSERT INTO `user`(name,age) VALUES(lili,27); INSERT INTO `user`(name,age) VALUES(lili,28); ROLLBACK;
BEGIN;
INSERT INTO `user`(name,age) VALUES(lili,27);
INSERT INTO `user`(name,age) VALUES(lili,28);
COMMIT;
SET autocommit=0;
INSERT INTO `user`(name,age) VALUES(lili,27);
INSERT INTO `user`(name,age) VALUES(lili,28);
COMMIT;

關系型數據庫---MySQL---事務