• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            網(wǎng)絡(luò)服務(wù)器軟件開(kāi)發(fā)/中間件開(kāi)發(fā),關(guān)注ACE/ICE/boost

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              152 Posts :: 3 Stories :: 172 Comments :: 0 Trackbacks

                   1.創(chuàng)建表測(cè)試表tb_test,如下:
            --------------------------------------------------------------------
              CREATE TABLE `tb_test` (
              `id` int(32) NOT NULL COMMENT 'k',
              `name` varchar(32) NOT NULL DEFAULT '',
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
            --------------------------------------------------------------------
            其中id為主鍵,不能重復(fù)
                  2.創(chuàng)建存儲(chǔ)過(guò)程sp_test,如下:
            -------------------------------------------------------------------
            begin

              start transaction;
             insert into tb_test(id,name)  values (10000,'admin1');
             insert into tb_test(id,name)  values (10000,'admin2');

             commit;

            end

            ---------------------------------------------------------------------
                  3.現(xiàn)象:執(zhí)行sp_test,由于id是唯一鍵,不能重復(fù),所以sp_test中執(zhí)行第二條insert語(yǔ)句時(shí),會(huì)出現(xiàn)錯(cuò)誤,后面的commit語(yǔ)句不會(huì)執(zhí)行,也就不會(huì)提交,再次執(zhí)行sp_test,報(bào)同樣的錯(cuò)誤,但觀察數(shù)據(jù)表,admin1卻已經(jīng)被寫(xiě)到表里了
                  4.解釋:由于事務(wù)是針對(duì)當(dāng)前連接的,第一次執(zhí)行sp_test時(shí),start transaction;開(kāi)始了一個(gè)新的事物,第一個(gè)insert正確執(zhí)行,第二個(gè)insert報(bào)錯(cuò),存儲(chǔ)過(guò)程返回,commit沒(méi)有執(zhí)行;第二次執(zhí)行sp_test,start transaction暗含了結(jié)束該連接的上一個(gè)事務(wù)的語(yǔ)義,由于第一次執(zhí)行時(shí)admin1被正確寫(xiě)入,此時(shí)提交,admin1就被真正的寫(xiě)到表里了。
                  5.方案:第一種方案,把事物的開(kāi)始,提交,回滾封裝到程序里面,只在存儲(chǔ)過(guò)程里面做具體的插入,更新操作,如果存儲(chǔ)過(guò)程成功就提交,如果失敗就回滾;第二種方案,在存儲(chǔ)過(guò)程里面捕獲異常,如果出現(xiàn)異常就回滾,否則就提交,具體代碼為:

            ---------------------------------------------------------------------
            begin
            DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
            begin
            rollback;
            select -1;
            end;

              start transaction;
             insert into tb_test(id,name)  values (10000,'admin1');
             insert into tb_test(id,name)  values (10000,'admin2');

             commit;

              select 0;
            end

            ---------------------------------------------------------------------

            這種方式,程序里面不會(huì)捕捉到任何異常,因?yàn)樵诖鎯?chǔ)過(guò)程里處理了,如果存儲(chǔ)過(guò)程返回0表示成功,返回-1表示失敗,如有必要也可以返回自增id
            posted on 2010-09-16 15:57 true 閱讀(1689) 評(píng)論(0)  編輯 收藏 引用 所屬分類: mysql
            国产精品99精品久久免费| 亚洲精品高清久久| 三级三级久久三级久久| 久久精品国产亚洲av麻豆图片| 久久中文字幕人妻熟av女| 国产亚洲色婷婷久久99精品| 久久91精品综合国产首页| 日本WV一本一道久久香蕉| 国产精品久久久久AV福利动漫| 国产女人aaa级久久久级| 久久99热这里只有精品66| 国产V综合V亚洲欧美久久| 一本大道久久香蕉成人网| 狠狠色丁香婷综合久久| 亚洲国产欧洲综合997久久| 国产精品美女久久久久av爽| 日本久久久久亚洲中字幕| 久久久久久久综合综合狠狠| 久久青青草原亚洲av无码app | 大香网伊人久久综合网2020| 99久久这里只精品国产免费| 久久精品国产一区二区三区日韩| 久久国产精品免费| 国产亚洲精品美女久久久| 久久午夜福利无码1000合集| 久久性生大片免费观看性| 久久99精品国产| 亚洲午夜久久久久久久久电影网 | 久久久久国产| 国产成人久久精品麻豆一区| 久久精品这里热有精品| 91久久精品91久久性色| 日韩精品久久无码人妻中文字幕| 久久亚洲精品国产亚洲老地址 | 少妇久久久久久久久久| 久久这里的只有是精品23| 中文精品99久久国产| 国内精品久久国产| 久久99精品久久只有精品| 99久久精品日本一区二区免费| 久久久精品人妻一区二区三区蜜桃 |