一、什麼是事務
為什麼要使用事務這個技術?現在很多軟體都是多用戶,多課程,多線程的,對於同一個表可能同時有很多人在用,為保持數據的一致性,所以提出了事務的概念。
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,'C',3000); savepoint a1; insert into account values(4,'D',3000); savepoint a2; insert into account values(5,'E',3000); savepoint a3;
三、事務回滾和還原點
1、事務的回滾
回到事務發生之前的資料狀態。透過rollback。
補充:commit and chain;表示提交事務之後重新開啟了新的事務。
rollback and release;表示回滾之後斷開和客戶的連結。
2、還原點(實例)
就会看到你插入的数据 如果你想回滚到某一状态只需rollback调用一下就行; 如:回到savepoint a1的状态
查看資料庫資訊
rollback to savepoint a1;
然後再執行查詢語句
就會看到表中就有一條新加的資料。
四、事務總結
事務應該具有4個屬性:
原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
原子性(atomicity):一個事務是一個不可分割的工作單位,事務中包含的諸操作要么都做,要么都不做。
一致性(consistency):事務必須是使資料庫從一個一致性狀態變到另一個一致性的狀態。一致性與原子性是密切相關的。
隔離性(isolation):一個事務的執行不能被其他事務幹擾,即一個事務內部操作及使用的資料對並發的其他事務隔離的,並發執行的各個事務之間不能相互幹擾。
持久性(durability):持久性也成永久性。只一個事務一旦提交,它對資料庫中資料的改變就應該是永久性的改變。接下來的其他操作或故障不應該對其有任何影響。
以上就是MySQL高級十-事務的應用的內容,更多相關內容請關注PHP中文網(m.sbmmt.com)!