· 对事务表(如InnoDB)使用LOCK TABLES的正确方法是,设置AUTOCOMMIT=0并且不能调用UNLOCK TABLES,直到您明确地提交事务为止。当您调用LOCK TABLES时,InnoDB会内部地取其自己的表锁定,MySQL取其自己的表锁定。InnoDB在下一个提交时释放其表锁定,但是,对于MySQL,要释放表锁定,您必须调用UNLOCK TABLES。您不应该让AUTOCOMMIT=1,因为那样的话,InnoDB会在调用LOCK TABLES之后立刻释放表锁定,并且很容易形成死锁定。注意,如果AUTOCOMMIT=1,我们根本不能获取InnoDB表锁定,这样就可以帮助旧的应用软件避免不必要的死锁定。关于事务锁表问题
root@localhost [aa]> set autocommit=1;
Query OK, 0 rows affected (0.00 sec)root@localhost [aa]> lock tables xxx write;
Query OK, 0 rows affected (0.00 sec)
-- engine是innodb
-- 我把autocommit=1;然后锁表.我在另开一个session .对xxx表进行insert.发现依然在等待锁的释放.
-- 官方文档上说.当autocommit=1时.就算调用lock tables 就马上释放表锁定的.那这里为什么没有释放呢?