【发布时间】:2014-09-26 13:46:32
【问题描述】:
我正在使用 MySQL MyISAM,这无法更改。但是,我只熟悉事务方法。由于 MyISAM 不支持事务,我正在考虑将两个更新查询合并为一个,如下所示:
UPDATE table1, table2 SET table1.col1='value1', table2.col1='value2'
WHERE table1.col3='567' AND table2.col6='876'
这是否保证如果任何子查询失败,另一个子查询也不会被执行并且查询将返回 FALSE?
为了测试这一点,我故意用无效的字段名称替换了表 1 和表 2 的有效字段名称。在这两种情况下,phpMyAdmin 都返回错误并且没有执行任何查询。
如果出现任何其他查询错误,是否会观察到这种行为?
【问题讨论】:
-
它不保证任何远程类似于交易。无论您尝试使用什么,都不会调用操作系统的
fsync调用或强制fsync,无论您如何尝试编写该查询。因此,根据定义 - 不,它不会模拟交易行为。你不能与 MyISAM 进行交易,你不能模仿它,你不能把它挤出来。你可以尝试加锁等等,但不会是这样。