create table t1
(
    tID int primary key,
    tName nvarchar(4)
);insert into t1 select 1,'a1' 
union  select 2,'a2'
union select 3,'a3';create table t2
(
    tID int primary key,
    tName nvarchar(4)
);insert into t2 select 101,'b1' 
union  select 102,'b2'
union select 103,'b3lock table t1 read; -- 以只读方式锁定t1表
select * from t2; -- 查询t2,报错在用只读方式锁定t1表后,为什么不能访问(查询)其它表(t2).锁定t1表,不能更新它我能理解,为什么连其它的表也要一起锁定呢?MySql是基于什么样的思想要这样设计的呢?上面的只读锁能否理解成共享锁?

解决方案 »

  1.   

    这个没有办法,这是MYSQL的特性,一旦开启了锁,则在其后的操作中所使用的表必须加锁。这和事务的概念也是一致的。
      

  2.   

    在用LOCK TABLES给表显式加表锁时,必须同时取得所有涉及到表的锁,也就是说,在执行LOCK TABLES后,只能访问显式加锁的这些表,不能访问未加锁的表;同时,如果加的是读锁,那么只能执行锁表的查询操作,MyISAM总是一次获得SQL语句所需要的全部锁。这也正是MyISAM表不会出现死锁(Deadlock Free)的原因。