【问题标题】:Does RDBMS guarantee row level atomicity?RDBMS 是否保证行级原子性?
【发布时间】:2017-12-26 02:46:20
【问题描述】:

不使用事务时,记录是否可能被修改了一半(并非所有请求的字段都被修改或仅部分 BLOB 被修改)? 它是否依赖于不同的数据库,如 SQLite 或 MySQL?

【问题讨论】:

  • 事务保证完全完成,或者失败并回滚(除非死锁等)。你能给这个问题一些背景吗?
  • 这与ACID compliance有关。 InnoDB 和 SQLite 应该这样做。 MyISAM 非常脆弱,可能但不能保证,因为可能会发生损坏问题。
  • @TimBiegeleisen 但我的问题是“不使用事务时”。我认为您可以配置您的数据库,使单个 SQL 语句不是事务。
  • 那我认为答案是肯定的,考虑这个例子。一个进程已部分更新了一条记录,而此时另一个进程进行了选择并读取了该记录。现在第二个进程已经读取了部分更新的不一致数据。这就是为什么大多数 RDBMS 都存在行锁的概念。

标签: mysql database sqlite


【解决方案1】:

当您不使用显式事务时,SQLite 和 MySQL 都使用自动提交模式,即,它们将在每个 SQL 语句周围包装一个隐式事务:
SQLite transactions
MySQL transactions

即使您使用“未提交读取”来减少事务隔离,数据库也不会允许您读取部分更新的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多