mysql开启事务之后没

mysql开启事务之后没,第1张

不一定要显式开启的。对于涉及一系列多条语句 *** 作,如果需要确保要么全部成功,要么全部失败,不出现中间状态,那就必须显式启用事务

而对于单独一条动作查询语句来讲,如果使用的是InnoDB存储引擎的话,就没必要显式开启事务了,因为数据库引擎会自动对单独一条SQL动作查询隐式开启事务。

例如:

insert

into

t2(id,name)

valuse('001','abc'),('002','cfg'),('003','hij')

上述一条语句向数据表插入三条记录,数据库引擎(InnoDB)会隐式开启事务,确保这三条记录要么全部插入成功,要么全部失败而不会出现中间状态。用户无需考虑事务问题,它由系统内部自动处置。

MySQL的事务如果不在任何修改,默认是自动提交的,也就是你只要执行一个SQL,回车之后这个SQL语句如果没有任何问题,只需完成后是自动提交的。

控制这个功能的参数是:autocommit。如果这个参数的值是on或者1,那么就是上面我说的那种现象。如果是off或者0,则表示不会自动提交事务。需要你显示的去提交事务。否则锁执行的SQL不会不会永久生效,只会对你当前命令行的session有效,退出MySQL后,执行的SQL语句将会别回滚。

当你需要两个SQL语句同时成功或者同时失败的时候,你可以手动地开启一个事务。比如下面的场景:

你想向订单表order_info表中插入一条新的订单记录,同时要想支付信息表payment_info中插入一条支付信息记录,这个时候从业务的角度上来看,这两个表中的插入 *** 作,需要保持原子性(也就是事务的四大特性之一),也就是要么都插入成功,要么都插入失败,不能存在订单插入成功,支付插入失败,反之也不可以。

要满足上面的需求,你就需要手动的去开启一个事务,在这个事务中去插入两个表中的数据。然后再提交这个事务。如果这两个表的插入 *** 作,你不手动的开启事务,MySQL自己会把两个SQL语句分开放在两个单独的事务中。执行一个插入,就会自动提交一个事务,然后在执行另外一个插入,再自动提交另外一个事务。

在MySQL看来,这是两个分别向两个表中插入的SQL语句而已,它不会从业务上考虑这两个SQL实际的业务逻辑背景是什么。所以此时他会看成是两个SQL语句,也就是两个事务。

这样的情况下就需要手动的开启事务。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8675786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存