【发布时间】:2017-12-26 02:46:20
【问题描述】:
不使用事务时,记录是否可能被修改了一半(并非所有请求的字段都被修改或仅部分 BLOB 被修改)? 它是否依赖于不同的数据库,如 SQLite 或 MySQL?
【问题讨论】:
-
事务保证完全完成,或者失败并回滚(除非死锁等)。你能给这个问题一些背景吗?
-
这与ACID compliance有关。 InnoDB 和 SQLite 应该这样做。 MyISAM 非常脆弱,可能但不能保证,因为可能会发生损坏问题。
-
@TimBiegeleisen 但我的问题是“不使用事务时”。我认为您可以配置您的数据库,使单个 SQL 语句不是事务。
-
那我认为答案是肯定的,考虑这个例子。一个进程已部分更新了一条记录,而此时另一个进程进行了选择并读取了该记录。现在第二个进程已经读取了部分更新的不一致数据。这就是为什么大多数 RDBMS 都存在行锁的概念。