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