MYSQL事务与锁表的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL事务与锁表的问题?相关的知识,希望对你有一定的参考价值。

后台语言用php,数据库为mysql,用InnoDB引擎,我先开启事务,然后用lock tables 锁住所有会受影响的表。但我发现如果先开启事务,再锁表。出现错误时事务不起作用,不能回滚,但程序执行过程中表是锁定的。如果把锁表放在事务前面,事务可以回滚,但表并没有锁定。两者不能同时使用吗?

MYSQL事务与锁表的问题?
这个要看事务隔离级别,mysql默认是“可重复读”,并且通过innodb引擎的多版本并发控制(MVCC,Multiversion Concurrency Control)机制防止了幻像读,同样,后面的select也不会被锁定。
当事务隔离级别升到“串行化”时,后面只要前面的session没有commit(包括select之后),那么后面的session的任何操作都会被锁定。
参考技术A 优化MYSQL 设置更新优先追问

能说详细点吗?

以上是关于MYSQL事务与锁表的问题?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL锁表和解锁操作

MYSQL:事务与锁

MySQL事务与锁

mysql事务与锁

mysql事务隔离级别与锁的关系

MySQL的事务与锁 转