我正在使用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返回错误,并且均未执行任何查询。
在发生其他任何查询错误的情况下,是否会观察到此行为?
抛出第一个错误后,您只能依靠任何不执行的东西(这些错误通常不是程序员,而是数据库级别的,这使得它们很难预测)。此时已写入数据库的任何内容都不会回滚(毕竟,您正在使用不支持该功能的MyISAM表)。
这不是您想听到的答案,但是,如果您想要可预测且可靠的事务行为,则实际上唯一的方法是使用支持它们的引擎(例如InnoDB)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句