Mysql能锁表吗?类型  select ...fro update

解决方案 »

  1.   

    我用MyISAM引擎LOCK TABLE xxx READ;
    LOCK TABLE xxx WRITE;
      

  2.   

    mysql> LOCK TABLE t WRITE, t AS t1 WRITE;
    mysql> INSERT INTO t SELECT * FROM t;
    ERROR 1100: Table 't' was not locked with LOCK TABLES
    mysql> INSERT INTO t SELECT * FROM t AS t1;
    如果您的查询使用一个别名引用一个表,那么您必须使用同样的别名锁定该表。如果没有指定别名,则不会锁定该表。mysql> LOCK TABLE t READ;
    mysql> SELECT * FROM t AS myalias;
    ERROR 1100: Table 'myalias' was not locked with LOCK TABLES
    相反的,如果您使用一个别名锁定一个表,您必须使用该别名在您的查询中引用该表。mysql> LOCK TABLE t AS myalias READ;
    mysql> SELECT * FROM t;
    ERROR 1100: Table 't' was not locked with LOCK TABLES
    mysql> SELECT * FROM t AS myalias;具体内容可参考mysql参考手册
      

  3.   

    直接锁表 的话,直接lock就行。
      

  4.   

    可以使用 select ... for update,  或者 SELECT ... LOCK IN SHARE MODE Locking Reads”. SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;
    SELECT counter_field FROM child_codes FOR UPDATE;
    UPDATE child_codes SET counter_field = counter_field + 1;