1.现在连接的数据库是mysql
2.我想用JAVA程序连接MYSQL,执行锁表操作 (LOCK TABLES table_name WRITE )
3.然后再执行插入语句(INSERT INTO table_name VALUES('aa'))
4.在进行解锁操作(UNLOCK TABLES)
5.要求这些操作要在同一个session中...请问用JAVA怎么去做跪求高手详解。。

解决方案 »

  1.   

    隔离级别设为READ_COMMITED以上,开一个事务应该就可以达到效果了吧。自己加锁好么?
      

  2.   


    我是想达到这样的目的:
    1.表内某一字段为主键.为整形.
    2.我想求这个主键的和 SUM(PRIMARK KEY).
    3.当我有一个session执行求和操作时,同时又有另一个session在插入,这时插入新的值也被SUM()了.
    4.我就是想在求和的把表锁住,不让别的session进行插入操作...请问隔离级别能解决这问题吗?
      

  3.   

    可以吧。你可以试一下TRANSACTION_SERIALIZABLE,最高级别。是加读锁一直到事务结束的。你试一下吧。
      

  4.   


    请火龙大哥不要追求我说的细节问题。。
    那就当那个字段是一般的index吧..请问,如果是一般的索引字段。。我将怎样避免冲突?
      

  5.   

    mySQL默认的事物隔离级别是Repeatable-Read应该就是线程安全的呀(只会出现幻读,很少考虑)...
      

  6.   

    innodb 的事务隔离级别事物隔离级别默认是Repeatable-Read 不会出现:幻象读,不可重复读,脏读。你所担心的问题是sum的时候,新值插入,出现事务内数据不一致问题,这个问题在innodb下开启事务时不会出现。
    你可以测试一下,建一个表table1,id主键,int;打开两个 mysql命令输入框,step1 :输入框1:
    start transaction;
    select sum(id) from table1;--看到没插入数据前的求和step2:输入框2:
    insert into table1(id) values(10);
    select * from tabble1;--会看到新插入的数据step3:再切到输入框1:
    select sum(id) from table1;--看到求和没有变化
    commit;--提交事务select sum(id) from table1;--看到求和增加10
    所以你的担心没有必要。不会出现幻象读,不可重复读的
      

  7.   

    用事务 如果很不幸地引擎是 myisam。 可以考虑在代码里锁