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的行级锁工作的更好。