MYSQL進階應用程式篇
一,交易處理及鎖定
1,mysql提供的儲存引擎(storage engine)
MyISAM 預設的高速引擎,不支援交易處理
InnoDB 支援行鎖定以及交易處理,比MyISAM處理速度稍慢
/*ISAM MyISAM引擎的前身。mysql5.0以後不再標準安裝了
MERGE 將多個MyISAM類型的表作為一個表來處理????
MEMORY,HEAP 只在記憶體上儲存資料
Falcon 一種新的支援交易處理的引擎
ARCHIVE 將資料壓縮後儲存(只能進行insert和select操作)
CSV 以CSV形式儲存資料(應用於跨平台資料交換)*/
小技巧~~~show create table custom; 語句執行後顯示的資料雜亂無章這是可是將結尾的分號換成\G 則得到的結果會顯得有條理的多
alter table custom engine=MyISAM;修改表的儲存引擎,如果不行查看一下my.ini是否將innoDB啟用了
2,事務的處理
select * from custom ;//查看資料表中內容,有三資料
begin;
delete from custome;
select * from custome;//資料表無資料
rollback ;
select * from custom ;//資料表三資料
set autocommit=0;
select * from custome //四條資料
insert into custom values (‘T0001’,"王二",...);
select * from custom //五條資料
rollback ;//四條資料
begin;
insert into custom values (‘T0001’,"王二",...);
insert into custom values (‘T0002’,"王三",...);
savepoint sp;
insert into custom values (‘T0003’,"王四",...);
rollback to savepoint sp; //回到王三
注意:一下幾條命令,執行後江北自動認可,是在交易處理控制之外
drop database;drop table;drop;alter table;
3,多使用者資料更新中曆屆交易處理的分離水平
分離水平越高資料的整合性隨之越高,但同時運行性下降!!
交易處理的分離水平:
非提交讀取不可重複讀取幻想讀取
read uncommitted 1 1 1
read committed 0 1 1
repeatable read0 0 1
serializable 0 0 0
非提交讀取又叫髒讀~能從別的交易處理中讀取到還沒有提交的更新資料。read uncommitted水平是對其他從
交易處理中讀取動作沒有進行任何顯示的分離水平,通常不推薦!
不可重複讀取~是在某一交易處理中對同一資料進行多次讀取,但是由於其他交易處理的更新動作讀取的資料狀態
發生了改變。由於交易處理A的更新動作,使得交易處理B第一次與第二次看到的結果不同!
發生在read committed以下的分離水平,要想避免則需將分離水平提高到read committed水平。
set session transaction isolation level read committed;
幻想讀取~~在某一交易處理中對同一資料進行多次讀取時,由於其他的交易處理進行了插入/刪除的動作
產生了結果中出現了第一次讀取時不存在的資料,或者第一次讀取時有的資料消失了的現象。
要消除則將分離水平提升至serializable水平。