分类: Mysql/postgreSQL
2010-01-19 17:05:21
MySQL支持4种事务隔离级别,他们分别是:
如没有指定,MySQL默认采用的是REPEATABLE-READ
ORACLE默认的是READ-COMMITTED
MySQL在REPEATABLE-READ和READ-COMMITTED在某些情况下会表现出不同的锁级别,下面举例说明。
首先创建测试表
INSERT INTO ivan(f_id, f_content) VALUES(1, ‘’);
INSERT INTO ivan(f_id, f_content) VALUES(1, ‘/blog/’);
INSERT INTO ivan(f_id, f_content) VALUES(1, ‘/bbs/’);
#session 1
#session 2
这时候你会发现,#session2 一直等待,直到#session1 commit之后,#session2才会返回,但是如果f_content存在索引,则会立即返回结果。这些是基于REPEATABLE-READ的测试,在READ-COMMITTED的情况下则表现和oracle一样,update会立即完成并返回结果。
#session 1
#session 2
总结:MySQL 在innodb等事务引擎的情况下,如果没有特殊要求,可以将默认的事务隔离级别设置为 READ-COMMITTED
或者开启 innodb_locks_unsafe_for_binlog
另外,涉及到的条件更新尽量建索引,这样一来对主键的选择就要严格控制,以便充分利用好宝贵的内存资源,因为innodb采用的是cluster index,其他索引都会带上它。