我正在使用MySQL MyISAM,这是无法更改的。但是,我只熟悉交易方法。由于MyISAM不支持事务,我正在考虑将两个更新查询组合成一个如下:
UPDATE table1, table2 SET table1.col1='value1', table2.col1='value2'
WHERE table1.col3='567' AND table2.col6='876'
这是否保证如果任何子查询失败,另一个子查询也不会被执行,查询将返回FALSE?
为了对此进行测试,我故意将有效字段名替换为table1的无效字段,然后替换为表2.在这两种情况下,phpMyAdmin都返回错误,并且没有执行任何查询。
如果出现任何其他查询错误,是否会出现此行为?
答案 0 :(得分:1)
您只能依赖于抛出第一个错误后未执行的任何内容(这些错误通常不在程序员身上,而是在数据库级别上,因此很难预测)。此时已写入数据库的任何内容都将不回滚(毕竟,您正在使用不支持该表的MyISAM表)。
这不是您想要听到的答案,但如果您想要可预测且可靠的事务行为,那么唯一的方法是使用支持它们的引擎(例如InnoDB)。