+ -
当前位置:首页 → 问答吧 → 为什么要用mysql事务?

为什么要用mysql事务?

时间:2011-11-24

来源:互联网

最近公司项目很多地方用到了mysql的事务,比如一条数据的删除,先删主表数据,再删两个明细表数据,这其中就用到了事务处理,为什么要这样用呢?回滚的具体含义是什么?为什么只要有失败操作的时候程序就会自动回滚?这样做有什么好处?
PHP code

function delete_dj($id) {
        $ret = $this->get_row($this->_table, array('Id'=>$id));
        if ($ret['status'] < 0) {
            return $this->format_ret(NODATA);
        }
        //开始事务
        $this->db->trans_begin();
        try {
            $ret = $this->delete($this->_table, array('Id'=>$id));
            if ($ret['status'] < 0) throw new Exception('delete dj failed!');
            
            $ret = $this->delete($this->_table.'mi', array('p_id'=>$id));
            if ($ret['status'] < 0) throw new Exception('delete djmi failed!');

            $ret = $this->delete($this->_table.'mx', array('dj_id'=>$id));
            if ($ret['status'] < 0) throw new Exception('delete djmx failed!');
            $this->db->trans_commit();
            $status = SUCCESS;
        } catch (Exception $e) {
            $this->db->trans_rollback();
            $status = ERROR;
        }

        return $this->format_ret($status);
    }

作者: LiveAsaMonster   发布时间: 2011-11-24

......
好吧请放大联想.你就深刻体会什么是事务了。

作者: PhpNewnew   发布时间: 2011-11-24

引用 1 楼 phpnewnew 的回复:
......
好吧请放大联想.你就深刻体会什么是事务了。

神马意思?

作者: LiveAsaMonster   发布时间: 2011-11-24

......
哪个有才的把我发的帖子给编辑了!怪署黍你个坏蛋
引用 2 楼 liveasamonster 的回复:

引用 1 楼 phpnewnew 的回复:
......
好吧请放大联想.你就深刻体会什么是事务了。

神马意思?

作者: PhpNewnew   发布时间: 2011-11-24

某天你认识了个美女,终于你们要一夜情了,这个时候你要爱抚,你要脱掉裤子,要戴上安全工具...关键时刻,你突然发现她是个伪娘~天哪

于是,这个时候突然我们发现我们用了事务.我们在大脑里赶紧说 :“回滚!回滚!”.Oh mygod.一切都消失了,时光倒流,回到了你刚认识这个“美女”的时候,这就是事务的作用。

如果不使用回滚

当你发现她是个伪娘的时候,你要用音速丢掉套套,穿上裤子,忍着恶心狂跑,并且希望永远不记得这件事情,可是第二天你发现你穿错了伪娘的裤衩,又把你恶心了一回。

这就是我刚发的内容,给哪个该死的家伙编辑成 ......了.

作者: PhpNewnew   发布时间: 2011-11-24

用户下订单并且支付了,这个是两张表,用户点击确认支付的时候你得操作这两张表(最起码,可能还有其他的),但是你操作订单表成功了,操作用户账户失败了,那么订单状态是已支付、用户的钱没扣到,你们就亏了。这时候如果采用事务,可以回滚,给用户提示支付失败,数据表没有任何改动。

这是我的对事务的体会。

作者: hero0524   发布时间: 2011-11-24

要么都成功 要么都失败 数据的一致性等等
比如说 银行的汇钱 你给我汇了一万块 操作是 update table set Money=Money+10000 where name='heyli'
update table set Money=Money-10000 where name='LiveAsaMonster' 
那这样就有可能说 只有 update table set Money=Money+10000 where name='heyli' 成功了 但下面的update table set Money=Money-10000 where name='LiveAsaMonster' 失败了
我的钱多而你的钱没少 这样银行肯定是不干的
回滚就变成什么都没操作
大概意思是这样子 不严谨

作者: heyli   发布时间: 2011-11-24

有点意思,但是程序是如何回滚的还是不明白,
PHP code

 $this->db->trans_rollback();


这句是php干的还是mysql干的呢?

作者: LiveAsaMonster   发布时间: 2011-11-24

$this->db->trans_rollback();


额, 为什么要加上这一句? mysql不是自动回滚的吗?求解释。

作者: gaozhen1990   发布时间: 2011-11-24

开始一个事物后(begin stran),执行操作,要么回滚(rollback),要么提交(commit)。
如果你不做回滚或者提交,这时数据库就被锁住了。(因为你再对数据库进行事物的操作)
提交就是确认执行事物中的操作。
回滚就是后悔了不执行操作,当什么事情都没有发生。

作者: yier1013   发布时间: 2011-11-24

回滚后,以前做的操作都取消,虽然失败了,只要回滚,就恢复到以前的数据。可以保证数据不丢失。

作者: yier1013   发布时间: 2011-11-24

各位说的都通俗易懂啊。

作者: ci1699   发布时间: 2011-11-24

这个 你去百度下事务的概念就知道什么意思了,度娘有很多这方面的知识。还有 二楼的解释很另类,但是也不错

作者: JustBeBetter   发布时间: 2011-11-24

相关阅读 更多