JAVA 锁表

沉沦 2010-09-07 08:23:39

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

请问用JAVA怎么去做。。。跪求高手详解。。
...全文
710 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉沦 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]
求主键和?我没看错吧?主键和有什么意义?

主键应充当非业务字段,也就是说其是什么值与业务逻辑毫不相关。如果硬要把业务字段作为主键,比如身份证号码什么、会员卡编号、手机号码、电话号码等,那将会在以后出现维护及扩充上的麻烦。
[/Quote]

请火龙大哥不要追求我说的细节问题。。
那就当那个字段是一般的index吧..

请问,如果是一般的索引字段。。我将怎样避免冲突?
magong 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 m582445672 的回复:]
我是想达到这样的目的:
3.当我有一个session执行求和操作时,同时又有另一个session在插入,这时插入新的值也被SUM()了.
4.我就是想在求和的把表锁住,不让别的session进行插入操作...
[/Quote]
似乎应该在求和的代码中加表级读锁吧
todd_liu 2010-09-08
  • 打赏
  • 举报
回复
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


所以你的担心没有必要。不会出现幻象读,不可重复读的
shehun 2010-09-08
  • 打赏
  • 举报
回复
没有做过,关注一下
沉沦 2010-09-08
  • 打赏
  • 举报
回复
如果我想用锁表的方法来解决这个问题.请问应该怎么做。
thegodofwar 2010-09-08
  • 打赏
  • 举报
回复
mySQL默认的事物隔离级别是Repeatable-Read应该就是线程安全的呀(只会出现幻读,很少考虑)...
lodachi 2010-09-08
  • 打赏
  • 举报
回复
开启事务不就行了
Kanepan 2010-09-08
  • 打赏
  • 举报
回复
用事务 如果很不幸地引擎是 myisam。 可以考虑在代码里锁
zhuyouyong 2010-09-07
  • 打赏
  • 举报
回复
dign[Quote=引用 1 楼 huguang 的回复:]
没做过,绑定了。
顺便问一下,为啥要锁?
[/Quote]
  • 打赏
  • 举报
回复
求主键和?我没看错吧?主键和有什么意义?

主键应充当非业务字段,也就是说其是什么值与业务逻辑毫不相关。如果硬要把业务字段作为主键,比如身份证号码什么、会员卡编号、手机号码、电话号码等,那将会在以后出现维护及扩充上的麻烦。

magong 2010-09-07
  • 打赏
  • 举报
回复
可以吧。你可以试一下TRANSACTION_SERIALIZABLE,最高级别。是加读锁一直到事务结束的。你试一下吧。
沉沦 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 magong 的回复:]
隔离级别设为READ_COMMITED以上,开一个事务应该就可以达到效果了吧。自己加锁好么?
[/Quote]

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

请问隔离级别能解决这问题吗?
magong 2010-09-07
  • 打赏
  • 举报
回复
隔离级别设为READ_COMMITED以上,开一个事务应该就可以达到效果了吧。自己加锁好么?
huguang 2010-09-07
  • 打赏
  • 举报
回复
没做过,绑定了。
顺便问一下,为啥要锁?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧