如果你在打开事务后没有进行提交(commit)或回滚(rollback),并且在脚本中没有其他地方进行提交(commit),那么这个事务就不会被数据库引擎所知道,并且会在脚本结束时自动回滚(rolled-back)。不过,我几乎总是会显式地进行提交(commit)或回滚(rollback),原因如下:1. 避免出现错误(例如在脚本后面“误提交”)的风险;2. 代码更易于阅读和理解:当一个人看到$db->rollback()时,他知道我一定想让事务回滚,而不必思考“他真的想要回滚吗?还是他忘记了某些东西?后面的脚本又会怎样?”等问题。数据库引擎无法“看到”PDO异常:它是由PHP在各种情况下抛出的——但数据库本身不会自动回滚任何操作:- 要么提交事务(commit) - 要么回滚事务(rollback) - 要么既不提交也不回滚事务,这意味着事务没有提交(commit),也就是说已经修改的内容并没有“真正”被修改。
rollback()
)以节省一些数据库资源应该是一个好的实践。 - Emil Ivanov