MySQL高級十-事務的應用

黄舟
發布: 2016-12-29 16:47:39
原創
949 人瀏覽過

一、什麼是事務

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

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);
登入後複製
start transaction;
登入後複製

3、開啟表的事務

commit;  
set autocommit = 0;
登入後複製

4、把資料設定為主動提交

<pre name="code" class="sql">update account set accmoney = accmoney - 1000 where aid = 1;  
update account set accmoney = accmoney + 1000 where aid = 2;
登入後複製

5、執行下面一條語句

select * from account;
登入後複製
登入後複製
登入後複製

6、開啟新的MySQL指令視窗並沒有查看account表

select * from account;
登入後複製
登入後複製
登入後複製

會發現資料庫改變,因為上面修改了指令,資料庫並沒有發出修改指令;

7、在原有的視窗中查詢就會發現資料已經改變

commit;
登入後複製

8、進行commit實物提交

select * from account;
登入後複製
登入後複製
登入後複製

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

set autocommit = 0;  
insert into account values(3,&#39;C&#39;,3000);  
savepoint a1;  
insert into account values(4,&#39;D&#39;,3000);  
savepoint a2;  
insert into account values(5,&#39;E&#39;,3000);  
savepoint a3;
登入後複製

三、事務回滾和還原點

1、事務的回滾

回到事務發生之前的資料狀態。透過rollback。

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

rollback and release;表示回滾之後斷開和客戶的連結。

2、還原點(實例)

就会看到你插入的数据

如果你想回滚到某一状态只需rollback调用一下就行;

如:回到savepoint a1的状态
登入後複製

查看資料庫資訊

rollback to savepoint a1;
登入後複製
rrreee

然後再執行查詢語句

就會看到表中就有一條新加的資料。

四、事務總結

事務應該具有4個屬性:

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

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

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

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

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

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


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!