con.start_transaction()写不写有什么区别呢

con.start_transaction()写不写有什么区别呢

之前在navicat直接写sql语句不开启事务,其实是自动开启一个事务对吧

那用python创建MySQL连接,执行一个sql语句,con.start_transaction()开启的事务没有隔离级别,那和不写con.start_transaction()有什么区别呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕元宝 2020-09-12 11:20:42

同学你好:

1、如果是mac版本在navicat直接写入sql语句的时候,可以设置自动开启事务,也可以不设置。

如果是windows系统同学也可以在navicat中输入show variables like 'autocommit 可以先看一下事务是否是自动提交的。

http://img1.sycdn.imooc.com//climg/5f5c393c09ed880309700652.jpg

如果查出来是ON,表明事务是自动提交的,修改数据之后不用自己提交。如果是OFF的话,就需要把自动提交先先打开了。navicat中是默认开启事务的,但不是说写sql的时候navicat就一定是开启事务的,也可以设置为不开启。

2、同学可以这样理解事务的基本要素(原子性,一致性,隔离性,持久性)

原子性:事务中的所有操作作为一个整体像原子一样不可分割,要么全部成功,要么全部失败

一致性:一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

隔离性:执行的事务不会相互影响,比如多个用户同时往一个账户转账,最后账户的结果应该和他们按先后次序转账的结果一样。

持久性:事务一旦提交,其对数据库的更新就是持久的,任何事务或系统故障都不会导致数据丢失。

所以同学可以理解为这里只是没有设置隔离级别,但是开启事务不仅对数据有隔离性,还有其他的特性

如果我的回答解决了同学的疑惑,欢迎采纳,祝同学学习愉快!

  • 提问者 反冲斗士 #1
    那是不是说:1、一个事务需要设置隔离级别才会具有隔离性,没有设置就没有隔离性,但是其他三个属性无论设置与否都一定会存在。 2、SQL语句的运行可以没有事务
    2020-09-12 22:30:17
  • 好帮手慕小猿 回复 提问者 反冲斗士 #2
    1、同学说的对 2、SQL语句可以不开启事务
    2020-09-13 09:34:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师