MySQL高級十——事務的應用

一、什么是事務

為什么要使用事務這個技術?現在很多軟件都是多用戶,多課程,多線程的,對于同一個表可能同時有很多人在用,為保持數據的一致性,所以提出了事務的概念。

1、查看數據庫下面是否支持事務(innodb支持)?

show?engines;

2、查看mysql當前默認的存儲引擎?

show?variables?like?'%storage_engine%';

3、查看某張表的存儲引擎?

show?create?table?test;

4、對于表的存儲結構的修改?

建立InnoDB表:Create table … type=InnoDB;Alter table table_name type=InnoDB;

二、實例:

1、創建一個數據庫bank

create?table?account(??  aid?int?not?null,??  accname?varchar(20)?not?null,??  accmoney?decimal(10,2)?not?null,??  primary?key(aid))engine?=?innodb?default?charset?=?gbk;

2、向account表中插入兩條數據

insert?into?account?values(1,'A',4000);??  insert?into?account?values(2,'B',2000);

3、開啟表的事務

start?transaction;

4、把數據設置為主動提交

commit;??  set?autocommit?=?0;

5、執行下面一條語句

<pre class="brush:php;toolbar:false">update?account?set?accmoney?=?accmoney?-?1000?where?aid?=?1;??  update?account?set?accmoney?=?accmoney?+?1000?where?aid?=?2;

6、打開新的MySQL命令窗口查看account表

select?*?from?account;

會發現數據并沒有發生改變,因為上面修改了指令,數據庫并沒有發出修改指令;

7、在原有的窗口中查詢就會發現數據已經改變

select?*?from?account;

8、進行commit實物提交

commit;

9、在另外的客戶端中查看數據就會發現數據已經改變

select?*?from?account;

三、事務回滾和還原點

1、事務的回滾

回到事務發生之前的數據狀態。通過rollback。

補充:commit and chain;表示提交事務之后重新開啟了新的事務。?

rollback and release;表示回滾之后斷開和客戶的鏈接。

2、還原點(實例)

set?autocommit?=?0;??  insert?into?account?values(3,'C',3000);??  savepoint?a1;??  insert?into?account?values(4,'D',3000);??  savepoint?a2;??  insert?into?account?values(5,'E',3000);??  savepoint?a3;

查看數據庫信息

就會看到你插入的數據    如果你想回滾到某一狀態只需rollback調用一下就行;    如:回到savepoint?a1的狀態
rollback?to?savepoint?a1;

然后再執行查詢語句

就會看到表中就有一條新加的數據。

四、事務總結

事務應該具有4個屬性:

原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。

原子性(atomicity):一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。

一致性(consistency):事務必須是使數據庫從一個一致性狀態變到另一個一致性的狀態。一致性與原子性是密切相關的。

隔離性(isolation):一個事務的執行不能被其他事務干擾,即一個事務內部操作及使用的數據對并發的其他事務隔離的,并發執行的各個事務之間不能相互干擾。

持久性(durability):持久性也成永久性。只一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的改變。接下來的其他操作或故障不應該對其有任何影響。

?以上就是MySQL高級十——事務的應用的內容,更多相關內容請關注PHP中文網(www.php.cn)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享