您好,欢迎访问一九零五行业门户网

Java程序对MySQL数据库加锁实验

java程序对mysql数据库加锁实验,以下实验仅在mysql 5.0.45做的实验.
以下实验仅在mysql 5.0.45做的实验.
方法1:用mysql命令锁住表.
pstmt.executequery();           pstmt1.executequery();           pstmt2.executequery();          }      }  一、对于read lock 和 write lock官方说明:
   1.如果一个线程获得一个表的read锁定,,该线程(和所有其它线程)只能从该表中读取。
      如果一个线程获得一个表的write锁定,只有保持锁定的线程可以对表进行写入。
      其它的线程被阻止,直到锁定被释放时为止。
   2.当您使用lock tables时,您必须锁定您打算在查询中使用的所有的表。
      虽然使用locktables语句获得的锁定仍然有效,但是您不能访问没有被此语句锁定的任何的表。
      同时,您不能在一次查询中多次使用一个已锁定的表——使用别名代替,
      在此情况下,您必须分别获得对每个别名的锁定。
二、对与read lock 和 write lock个人说明:
    1.read lock 和 write lock 是线程级(表级别).
    2.在同一个会话中加了read lock锁. 只能对这个表进行读操作.对这个表以外的任何表都无法进行增、删、改、查的操作.
       但是在不同会话中,只能对加了read lock的表进行读操作.但可以对read lock以外的表进行增、删、改、查的操作.
    3.在同一个会话中加了write lock锁.只能对这个表进行读、写操作.对这个表以外的任何表都无法进行增、删、改、查的操作.
      但是在不同会话中,无法对加了write lock的表进行读、写操作.但可以对write lock以外的表进行增、删、改、查的操作.
   4.如果表中使用了别名.(select * from aa1 as byname_table)
      在对aa1加锁时,必须把别名加上去(lock tables aa1 as byname_table read)
      在同一个会话中.必须使用别名进行查询.
      在不同的会话中.可以不需要使用别名进行查询.
   5.在多个会话中可以对同一个表进行lock read操作.但不能在多个会话中对同一个表进行lock write操作(这些锁将等待已锁的表释放自身的线程锁)
     如果多个会话对同一个表进行lock read操作.那么在这些会话中,也只能对以锁的表进行读操作.
   6.如果要你锁住了一个表,需要嵌套查询.你必须使用别名,并且,要锁定别名.
     例如.lock table aa1 read ,aa1 as byname_table read;
     select * from aa1 where id in (select * from aa1 as xx  where id=2);  
   7.解锁必须用unlock tables;
   另:
      在java程序中,要想解锁,需要调用 unlock tables来解锁.
      如果没有调用unlock tables.
      关闭connection 、程序结束 、调用gc 都能解锁.
其它类似信息

推荐信息