MySQL 事務(wù)

2022-02-17 14:42 更新

MySQL 事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫操作語句就構(gòu)成一個事務(wù)!

  • 在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)。
  • 事務(wù)處理可以用來維護數(shù)據(jù)庫的完整性,保證成批的SQL語句要么全部執(zhí)行,要么全部不執(zhí)行。
  • 事務(wù)用來管理 insert , update , delete 語句。

一般來說,事務(wù)是必須滿足4個條件(ACID): Atomicity(原子性或不可分割性)、Consistency(一致性)、Isolation(隔離性或獨立性)、Durability(持久性)

  • 1、原子性:一組事務(wù),要么成功;要么撤回,即事務(wù)在執(zhí)行過程中出錯會回滾到事務(wù)開始前的狀態(tài)。
  • 2、一致性 : 一個事務(wù)不論是開始前還是結(jié)束后,數(shù)據(jù)庫的完整性都沒有被破壞。因此寫入的數(shù)據(jù)必須完全符合所有預(yù)設(shè)規(guī)則(資料精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫能夠自發(fā)完成預(yù)定工作)。
  • 3、隔離性:數(shù)據(jù)庫允許多個事務(wù)并發(fā)的同時對其數(shù)據(jù)進行讀寫修改等操作,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離可分為:Read uncommitted(讀未提交)、Read committed(讀提交)、Repeatable read(可重復(fù)讀)、Serializable(串行化)。
  • 4、持久性:事務(wù)在處理結(jié)束后對數(shù)據(jù)做出的修改是永久的,無法丟失。

事務(wù)控制語句

1,顯式的開始一個事務(wù):

start transaction

begin

2, 做保存點,一個事務(wù)中可以有多個保存點:

savepoint 保存點名稱

3, 提交事務(wù),并使數(shù)據(jù)庫中進行的所有修改成為永久性的:

commit

commit work

4,回滾結(jié)束用戶的事務(wù),并撤銷正在進行的所有未提交的修改:

rollback

rollback work

5.刪除一個事務(wù)的保存點,若沒有指定保存點,執(zhí)行該語句操作會拋錯。

release savepoint 保存點名稱

6.將事務(wù)滾回標記點:

rollback to 標記點

7.設(shè)置事務(wù)的隔離級別。InnoDB 存儲引擎提供事務(wù)的隔離級別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

set transaction

事務(wù)處理方法

1.用 begin , rollback , commit 來實現(xiàn)事務(wù)處理。

2.用 set 來改變 MySQL 的自動提交模式。

  • set autocommit = 0 (禁止自動提交)。
  • set autocommit = 1 (開啟自動提交)。

PHP中使用事務(wù)實例

<?php
$handler=mysql_connect("localhost","root","password");
mysql_select_db("task");
mysql_query("SET AUTOCOMMIT=0");//設(shè)置為不自動提交,因為MYSQL默認立即執(zhí)行 mysql_query("BEGIN");//開始事務(wù)定義
if(!mysql_query("insert into trans (id) values('2')"))
{
mysql_query("ROOLBACK");//判斷當(dāng)執(zhí)行失敗時回滾
}
if(!mysql_query("insert into trans (id) values('4')"))
{
mysql_query("ROOLBACK");//判斷執(zhí)行失敗回滾
}
mysql_query("COMMIT");//執(zhí)行事務(wù)
mysql_close($handler);
?>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號