我正在阅读有关MySQL事务的内容,不确定是否已经正确掌握了某些特定内容,并且想要确保自己理解正确,以下是问题。我知道事务应该是做什么的,只是不确定我是否正确地理解了语句语义。
所以,我的问题是:下面的内容是否有任何错误(如果有的话,是什么错误):
默认情况下,MySQL启用了自动提交模式。
现在,SET autocommit = 0;
将开始一个事务,SET autocommit = 1;
会隐式提交。可以使用COMMIT;
和ROLLBACK;
,在这两种情况下,autocommit在之后仍然设置为0(并且会隐式启动新的事务)。
START TRANSACTION;
基本上会执行SET autocommit = 0;
,直到发生COMMIT;
或ROLLBACK;
。
换句话说,START TRANSACTION;
和SET autocommit=0;
是等价的,除了START TRANSACTION;
相当于在COMMIT;
或ROLLBACK;
之后隐式添加SET autocommit=1;
之外。
如果是这样,那么我就不明白http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html#isolevel_serializable - 因为具有隔离级别意味着有一个事务,这意味着autocommit应该已经关闭了吗?
如果有除上述描述之外的其他区别(开始事务和设置autocommit之间的区别),是什么?
SET autocommit = 0;
只是一种偏好,以免忘记使用事务。 - Timo HuovinenSTART TRANSACTION
明确启动事务时,即使自动提交已开启,我也必须明确指定COMMIT
。是这样吗? - tomwang1013