TP5事務操作簡明實例

一、使用事務處理的場景:

如果一個操作會改變數據庫多處信息,並且這些信息是密切相關的,

爲了確保每一處改動都是成功的,如果其中一處改動不成功,就將其它改動撤銷,以保證數據(事務)的完整性。

比如:你給我轉賬10000塊,需要把你的餘額減10000,我的加10000,如果萬一我的餘額寫入失敗,那麼理應你的餘額不變,

不然這10000就蒸發了~~

二、使用事務處理的前提:

需要數據庫引擎支持事務處理。

比如 MySQL 的 MyISAM 不支持事務處理,需要使用 InnoDB 引擎。

實例:


        try {

            Db::startTrans();

            //將數據1存入表1,並獲取ID:
            $re['t1'] = Db::name('table1')
                ->insertGetId([
                    'content1' => $content1
                ]);

            //將數據2寫入表2
            $re['t2'] = Db::name('table2')
                ->insert([
                    'id' => $re['t1'],
                    'content2' => $content2
                ]);

            //任意一個表寫入失敗都會拋出異常:
            if (in_array('0', $re)) {        
                throw new Exception('意不意外?');
            }

            Db::commit();
            $this->success('完美一擊!');

        } catch (Exception $e) {
            //如獲取到異常信息,對所有表的刪、改、寫操作,都會回滾至操作前的狀態:
            Db::rollback();
            $this->error($e);

        }

如有任何疑議,歡迎大家留言指正,謝謝~

如此文章對你有幫助,請打開支付寶搜索535149388,領取馬雲的紅包,使用餘額寶消費可抵扣,大家好,纔是真的好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章