SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么?)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么?),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2489字,纯文字阅读大概需要4分钟。
内容图文
![SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么?)](/upload/InfoBanner/zyjiaocheng/890/5c1c1d1eec5a43a2af7f92b32f741703.jpg)
我正在阅读MySQL中的交易,我不确定我是否正确掌握了一些特定的东西,我想确定我理解正确,所以这里就是这样.我知道一个事务应该做什么,我只是不确定我是否理解语句语义.
所以,我的问题是,有什么不对,(并且,如果是这种情况,有什么问题),以下内容:
默认情况下,MySQL中启用自动提交模式.
现在,SET autocommit = 0;将开始一个事务,SET autocommit = 1;将隐式提交.有可能COMMIT;以及ROLLBACK;,在这两种情况下,autocommit之后仍然设置为0(并且隐式启动新事务).
开始交易;将基本上SET SET autocommit = 0;直到一个COMMIT;或者ROLLBACK;发生了.
换句话说,START TRANSACTION;和SET autocommit = 0;是等同的,除了START TRANSACTION;相当于隐式添加SET autocommit = 0; COMMIT之后;或者ROLLBACK;
如果是这种情况,我不明白http://dev.mysql.com/doc/refman/5.5/en/set-transaction.html#isolevel_serializable – 看到有一个隔离级别意味着有一个事务,这意味着自动提交应该是关闭的吗?
如果在开始交易和设置自动提交之间存在另一个差异(除了上述的差异之外),它是什么?
解决方法:
了解数据库的事务(自动提交,显式和隐式)处理可以使您不必从备份还原数据.
事务控制数据操作语句以确保它们是原子的. “原子”意味着交易要么发生,要么不发生.向数据库发出事务完成信号的唯一方法是使用COMMIT或ROLLBACK语句(根据ANSI-92,遗憾的是不包括创建/开始事务的语法,因此它是特定于供应商的). COMMIT应用在事务中进行的更改(如果有). ROLLBACK忽略了事务中发生的任何操作 – 当UPDATE / DELETE语句无意中发生某些事情时非常需要.
通常,单个DML(插入,更新,删除)语句在自动提交事务中执行 – 它们在语句成功完成后立即提交.这意味着在像您这样的情况下运行语句之前,没有机会将数据库回滚到状态.当出现问题时,唯一可用的恢复选项是从备份重建数据(提供一个存在).在MySQL,autocommit is on by default for InnoDB中 – MyISAM不支持事务.可以使用以下方法禁用它:
SET autocommit = 0
显式事务是当语句包含在显式定义的事务代码块-for MySQL, that’s START TRANSACTION中时.它还需要在事务结束时显式生成COMMIT或ROLLBACK语句.嵌套事务超出了本主题的范围.
隐式事务与显式事务略有不同.隐式事务不需要明确定义事务.但是,与显式事务一样,它们需要提供COMMIT或ROLLBACK语句.
结论
显式事务是最理想的解决方案 – 它们需要一个语句,COMMIT或ROLLBACK来完成事务,并且如果有需要,其他人可以清楚地说明正在发生的事情.如果以交互方式使用数据库,则隐式事务是可以的,但只有在测试结果后才能指定COMMIT语句.彻底坚决有效.
这意味着你应该使用:
SET autocommit = 0;
START TRANSACTION;
UPDATE ...;
…并且只使用COMMIT;当结果是正确的.
也就是说,UPDATE和DELETE语句通常只返回受影响的行数,而不是特定的详细信息.将这些语句转换为SELECT语句&在尝试UPDATE / DELETE语句之前,请检查结果以确保正确性.
附录
DDL(数据定义语言)语句是自动提交的 – 它们不需要COMMIT语句. IE:表,索引,存储过程,数据库和视图创建或更改语句.
内容总结
以上是互联网集市为您收集整理的SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么?)全部内容,希望文章能够帮你解决SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么?)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。