MySql在两个层面实现并发控制:服务器层和存储引擎层。
MySql服务器层不管理事务,事务是由下层存储引擎实现的。所以在同一个事务中,使用多种存储引擎是不可靠的。
一、隐式锁定和显式锁定:
1.在事务执行过程中随时都可以执行锁定,锁只有在执行COMMIT或者ROLLBACK的时候才会释放,并且所有的锁都是同一时刻被释放的。这些都是隐式锁定,InnoDB会根据隔离级别在需要的时候自动加锁。
2.InnoDB也支持通过特定的语句进行显式锁定,这些语句应该尽量避免使用:
SELECT ... LOCK IN SHARE MODE
SELECT ... FOR UPDATE
MySql也支持LOCK TABLES 和 UNLOCK TABLES语句,这是在服务器层实现的,和存储引擎无关。它们有自己的用途。如果应用需要用到事务,还是应该选择事务型存储引擎。 当应用已经将表从MyISAM转换到InnoDB但还是显式的使用LOCK TABLES语句,会严重影响性能,实际上InnoDB的行级锁工作的更好。