【问题标题】:Does MySql automatically lock rows or do I need to add "lock in share mode"?MySql 会自动锁定行还是我需要添加“锁定共享模式”?
【发布时间】:2012-11-15 18:08:47
【问题描述】:

我们是初学者,我们的 java 软件使用 select * 等从数据库中获取查询。

我的问题是我们需要在共享模式和“FOR UPDATE”中添加锁来强制执行锁,还是表和行锁是自动的?

我们有一张表,我们想强制执行并发,我可以将 LOCK TABLE 添加到我需要锁定的表中,然后更新值,然后解锁它吗?

【问题讨论】:

  • 您的意思是说您需要“强制并发”吗?您的意思是您需要在许多相关查询中强制执行事务一致性吗?您使用的是什么数据库引擎,因为引擎之间在处理事务、表和行级锁定等方面可能存在显着差异?
  • @mikeBrant,是的,我需要在相关查询中强制执行事务一致性。特别是有一个表可以同时写入。我相信我们使用的引擎是 Innodb。

标签: mysql database jdbc


【解决方案1】:

我认为根据您对我的 cmets 的回答,您真的不必担心手动处理表锁。 InnoDB 支持行级锁定并启用自动提交(默认情况下)所有单个查询实际上都以事务方式处理。

现在,如果您有多个 SQL 查询需要作为单个事务处理(即更新一个表,然后更新另一个表 - 要么都成功,要么都回滚),那么您需要专门启动一个事务,或者在临时查询执行后提交或回滚。

如果需要更改事务隔离级别,也可以使用SET TRANSACTION语句(默认为`REPEATABLE READ1)。

欲了解更多信息,请查看MySQL Documentation

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多