栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么吗?)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SET autocommit = 1和mysql中的START TRANSACTION之间的区别(我错过了什么吗?)

了解数据库的事务(自动提交,显式和隐式)处理可以使您不必从备份中还原数据。

事务控制数据操作语句以确保它们是原子的。“原子性”表示交易已发生或未发生。向数据库发出事务完成信号的唯一方法是使用

COMMIT
or
ROLLBACK
语句(根据ANSI-92,遗憾的是它不包含用于创建/开始事务的语法,因此它是特定于供应商的)。
COMMIT
应用在交易中进行的更改(如果有)。
ROLLBACK
忽略事务中发生的任何动作-当UPDATE /
DELETE语句做意外的事情时,这是非常理想的


通常,单个DML(插入,更新,删除)语句在自动提交事务中执行-
语句成功完成后便会提交它们。这意味着在像您这样的情况下,没有机会将数据库回滚到语句运行之前的状态。当出现问题时,唯一可用的还原选项是从备份中重建数据(假设存在备份)。在MySQL中,默认情况下,InnoDB的自动提交功能
处于启用状态
-MyISAM不支持事务。可以使用以下命令禁用它:

SET autocommit = 0

显式事务是指将语句包装在显式定义的事务代码块中- 对于MySQL,即

STARTTRANSACTION
。它还需要在交易结束时明确做出
COMMIT
ROLLBACK
声明。嵌套事务不在本主题的范围之内。

隐式交易与显式交易略有不同。隐式事务不需要显式定义事务。但是,像显式事务一样,它们需要提供

COMMIT
or
ROLLBACK
语句。

结论

显式事务是最理想的解决方案-
它们要求使用语句

COMMIT
ROLLBACK
来完成事务,并且明确说明正在发生的事情,以便其他人在需要时阅读。如果以交互方式使用数据库,则隐式事务是可以的,但是
COMMIT
只有在对结果进行了测试并确定其有效之后,才应指定语句。

这意味着您应该使用:

SET autocommit = 0;START TRANSACTION;  UPDATE ...;

…并且仅

COMMIT;
在结果正确时使用。

也就是说,UPDATE和DELETE语句通常仅返回受影响的行数,而不返回特定的详细信息。将此类语句转换为SELECT语句,并
尝试UPDATE / DELETE语句 之前 检查结果以确保正确性。

附录

DDL(数据定义语言)语句是自动提交的-它们不需要COMMIT语句。IE:表,索引,存储过程,数据库和视图创建或更改语句。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416430.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号