亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 事務(wù)隔離級別導(dǎo)致鎖級別的不 [打印本頁]

作者: jackshan    時間: 2010-01-19 17:05
標(biāo)題: 事務(wù)隔離級別導(dǎo)致鎖級別的不

MySQL支持4種事務(wù)隔離級別,他們分別是:
READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.

如沒有指定,MySQL默認(rèn)采用的是REPEATABLE-READ
ORACLE默認(rèn)的是READ-COMMITTED
MySQL在REPEATABLE-READ和READ-COMMITTED在某些情況下會表現(xiàn)出不同的鎖級別,下面舉例說明。
首先創(chuàng)建測試表
CREATE TABLE ivan(
  f_id int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  f_content varchar(32) NOT NULL DEFAULT ”
) engine=innodb DEFAULT charset=latin1;
INSERT INTO ivan(f_id, f_content) VALUES(1, ‘http://www.mysqlab.net’);
INSERT INTO ivan(f_id, f_content) VALUES(1, ‘http://www.mysqlab.net/blog/’);
INSERT INTO ivan(f_id, f_content) VALUES(1, ‘http://www.mysqlab.net/bbs/’);

#session 1
SET tx_isolation=‘REPEATABLE-READ’;
SET auto_commit=0;
UPDATE ivan SET f_content=” WHERE f_content=‘http://www.mysqlab.net’;

#session 2
SET tx_isolation=‘REPEATABLE-READ’;
UPDATE ivan SET f_content=” WHERE f_content=‘http://www.mysqlab.net/blog/’;

這時候你會發(fā)現(xiàn),#session2 一直等待,直到#session1 commit之后,#session2才會返回,但是如果f_content存在索引,則會立即返回結(jié)果。這些是基于REPEATABLE-READ的測試,在READ-COMMITTED的情況下則表現(xiàn)和oracle一樣,update會立即完成并返回結(jié)果。
#session 1
SET tx_isolation=‘READ-COMMITTED’;
SET auto_commit=0;
UPDATE ivan SET f_content=” WHERE f_content=‘http://www.mysqlab.net’;

#session 2
SET tx_isolation=‘READ-COMMITTED’;
UPDATE ivan SET f_content=” WHERE f_content=‘http://www.mysqlab.net/bbs/’;

總結(jié):MySQL 在innodb等事務(wù)引擎的情況下,如果沒有特殊要求,可以將默認(rèn)的事務(wù)隔離級別設(shè)置為 READ-COMMITTED
或者開啟 innodb_locks_unsafe_for_binlog
transaction_isolation = READ-COMMITTED
innodb_locks_unsafe_for_binlog=On

另外,涉及到的條件更新盡量建索引,這樣一來對主鍵的選擇就要嚴(yán)格控制,以便充分利用好寶貴的內(nèi)存資源,因為innodb采用的是cluster index,其他索引都會帶上它。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u1/51714/showart_2153381.html




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2