ckbtr2015
老生
老生
  • UID21
  • 粉丝0
  • 关注0
  • 发帖数2
  • 社区居民
阅读:2965回复:3

事务中有几个操作的问题

楼主#
更多 发布于:2015-09-11 17:54
1.同一个事务中,如果有1.2.3.4个操作,如果前2个成功了,第3个失败了,那么第4个还会继续执行么?
2.嵌套事务中,A里面嵌套了B,B里面嵌套了C,如果C失败了,那么对B有什么影响,对A又有什么影响?
ps:这两个是今天面试中被一个技术总监的问到的问题,完全没能答上来,我只有一些常用的事务经验,查找了一些资料,也还是稀里糊涂。急求叔特殊的讲授方法
shenyi
管理员
管理员
  • UID1
  • 粉丝36
  • 关注0
  • 发帖数652
沙发#
发布于:2015-09-12 14:17
以mysql为列:
       MYSQL默认事物是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
      set autocommit=0   禁止自动提交
      set autocommit=1 开启自动提交

 不管自动还是不自动,事务都是要么都执行要么都不执行。
如果有 a,b,c 三条sql语句。如果a成功,b出错,那么c不会执行。

可以在mysql中试一下,但是切记。当前数据库引擎必须不能是MyISAM。MyISAM不支持事务,但是你在MyISAM模式中写事务,mysql并不会报错。
会讲故事的程序员
shenyi
管理员
管理员
  • UID1
  • 粉丝36
  • 关注0
  • 发帖数652
板凳#
发布于:2015-09-12 14:20
关于嵌套事务,可以看 这篇文章http://hideto.iteye.com/blog/195275。另外,请亲手试一下
会讲故事的程序员
shenyi
管理员
管理员
  • UID1
  • 粉丝36
  • 关注0
  • 发帖数652
地板#
发布于:2015-09-12 14:24
在mysql中, 事务嵌套有个 “潜规则”
 set autocommit=0;
   start TRANSACTION ;
    insert into bb(name) values('fuck')

     //如果这时你在下面又start TRANSACTION ; 那么。上面一句 fuck已经插入到了bb中,这叫触发了隐藏的事务提交
        start TRANSACTION ;
        insert into aa(name) valued('dd')
会讲故事的程序员
游客

返回顶部