最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL嵌套事務(wù)所遇到的問(wèn)題

 更新時(shí)間:2017年02月26日 10:49:42   作者:rfyiamcool  
這篇文章主要介紹了MySQL嵌套事務(wù)所遇到的問(wèn)題的相關(guān)資料,需要的朋友可以參考下

MySQL是支持嵌套事務(wù)的,但是沒(méi)多少人會(huì)這么干的…. 前段時(shí)間在國(guó)外看到一些老外在爭(zhēng)論MySQL嵌套事務(wù)的場(chǎng)景必要性。 逗死我了, 這嵌套的鬼畜用法還有啥場(chǎng)景必要性。   跟以前的dba同事聊過(guò), 得知,在任何場(chǎng)景下都不要使用MySQL嵌套的事務(wù)。

那么使用MySQL嵌套事務(wù)會(huì)遇到什么問(wèn)題 ?

mysql> select * from ceshi; 
+------+ 
| n  | 
+------+ 
|  1 | 
+------+ 
1 row in set (0.00 sec) 
 
mysql> start transaction ; 
Query OK, 0 rows affected (0.00 sec) 
 
mysql> insert into ceshi values(2); 
Query OK, 1 row affected (0.00 sec) 
 
mysql> start transaction ; 
Query OK, 0 rows affected (0.00 sec) 
 
mysql> insert into ceshi values(3); 
Query OK, 1 row affected (0.00 sec) 
 
mysql> commit; 
Query OK, 0 rows affected (0.00 sec) 
 
mysql> rollback; 
Query OK, 0 rows affected (0.00 sec) 


雖然我在最后rollback回滾了,但是數(shù)據(jù)顯示是  1 2 3  .    原本大家以為我的事務(wù)雖然是嵌套的狀態(tài),但感覺(jué)最后rollback回滾了,其實(shí)我們希望看到的結(jié)果是 子事務(wù)執(zhí)行成功,外層事務(wù)的失敗會(huì)回滾的。  但事實(shí)不是這樣的,最后的結(jié)果是  1 2 3 .

+-----+ 
| n   | 
+-----+ 
|  1 | 
|  2 | 
|  3 | 
+-----+ 

當(dāng)sql解釋器遇到 start transaction 時(shí)候會(huì)觸發(fā)commit… !!!   

begin_1  sql_1  begin_2  sql_2  sql_3 commit_1  rollback_1  .

begin_2 被執(zhí)行的時(shí)候, sql_1 已經(jīng)就被提交了, 當(dāng)你再去執(zhí)行commit_1的時(shí)候,那么sql_2 和 sql_3 就被提交了.    這時(shí)候你再去rollback,一定用都沒(méi)有….    因?yàn)橄惹岸继峤煌炅耍隳芑貪L啥…

前面說(shuō)過(guò) 在架構(gòu)上一般很少很少有人會(huì) 嵌套使用事務(wù),但有時(shí)候不小心被嵌套了。 我們拿python的項(xiàng)目來(lái)說(shuō),首先我們使用裝飾器來(lái)實(shí)現(xiàn)事務(wù)的包裝, 接著數(shù)據(jù)處理 def a() 和  def b() 函數(shù)都被事務(wù)被包裝起來(lái), 單純的用a 和 b 都沒(méi)關(guān)系,都是單事務(wù)。  如果 a 邏輯里又調(diào)用 b, 那么會(huì)發(fā)生什么?   對(duì)的,事務(wù)嵌套了…    我想這是絕大數(shù)業(yè)務(wù)開(kāi)發(fā)都會(huì)遇到的問(wèn)題。

那么怎么規(guī)避這風(fēng)險(xiǎn) ?  可以加鎖呀….   設(shè)立一個(gè)全局鎖,當(dāng)子事務(wù)創(chuàng)建前會(huì)判斷鎖的狀態(tài)….

如果你是flask的框架,可以使用 flask g 全局變量。  

如果是django框架, 那么可以使用 thread local使用全局變量。

如果是tornado、gevent這種異步io架構(gòu),可以使用 fd 做協(xié)程變量的關(guān)聯(lián)。

@decorator
def with_transaction(f, *args, **kwargs):
 
  db = connection.get_db_by_table("*")
  try:
    db.begin()
    ret = f(*args, **kwargs)
    db.commit()
  except:
    db.rollback()
    raise
  return ret
 
 
@with_transaction
def hide(self):
  '''訂單不在app端顯示'''
  if self.status not in OrderStatus.allow_deletion_statuses():
    raise OrderStatusChangeNotAllowed(self.status, OrderStatus.deleted)
...
 
 
@with_transaction
def change_receipt_info(self, address, name, phone):
  region = Region.get_by_address(address)
  ...

當(dāng)我們?nèi)?zhí)行下面語(yǔ)句的時(shí)候,事務(wù)會(huì)被強(qiáng)制提交.   當(dāng)然這里前提是 autocommit = True 。

ALTER FUNCTION  
ALTER PROCEDURE  
ALTER TABLE  
BEGIN  
CREATE DATABASE  
CREATE FUNCTION  
CREATE INDEX  
CREATE PROCEDURE  
CREATE TABLE  
DROP DATABASE  
DROP FUNCTION  
DROP INDEX  
DROP PROCEDURE  
DROP TABLE  
UNLOCK TABLES  
LOAD MASTER DATA  
LOCK TABLES  
RENAME TABLE  
TRUNCATE TABLE  
SET AUTOCOMMIT=1  
START TRANSACTION  

相關(guān)文章

  • MySQL ifnull的嵌套使用說(shuō)明

    MySQL ifnull的嵌套使用說(shuō)明

    這篇文章主要介紹了MySQL ifnull的嵌套使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MySQL關(guān)于exists的一個(gè)bug

    MySQL關(guān)于exists的一個(gè)bug

    今天小編給大家分享一個(gè)mysql關(guān)于exists的一個(gè)bug問(wèn)題,非常不錯(cuò),感興趣的朋友一起學(xué)習(xí)下
    2016-08-08
  • 解決Can''t locate ExtUtils/MakeMaker.pm in @INC報(bào)錯(cuò)

    解決Can''t locate ExtUtils/MakeMaker.pm in @INC報(bào)錯(cuò)

    今天小編就為大家分享一篇關(guān)于解決Can't locate ExtUtils/MakeMaker.pm in @INC報(bào)錯(cuò),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • MySQL性能優(yōu)化之Open_Table配置參數(shù)的合理配置建議

    MySQL性能優(yōu)化之Open_Table配置參數(shù)的合理配置建議

    這篇文章主要介紹了MySQL性能優(yōu)化之Open_Table配置參數(shù)的合理配置建議,在MySQL數(shù)據(jù)庫(kù)中,Opened_tables表示打開(kāi)過(guò)的表數(shù)量,需要的朋友可以參考下
    2014-07-07
  • Ubuntu18.0.4下mysql 8.0.20 安裝配置方法圖文教程

    Ubuntu18.0.4下mysql 8.0.20 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu18.0.4下mysql 8.0.19 安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • MySQL中處理各種重復(fù)的一些方法

    MySQL中處理各種重復(fù)的一些方法

    這篇文章主要介紹了MySQL中處理各種重復(fù)的一些方法,包括對(duì)表和查詢結(jié)果的重復(fù)的一些處理,需要的朋友可以參考下
    2015-05-05
  • mysql數(shù)據(jù)庫(kù)常見(jiàn)的優(yōu)化操作總結(jié)(經(jīng)驗(yàn)分享)

    mysql數(shù)據(jù)庫(kù)常見(jiàn)的優(yōu)化操作總結(jié)(經(jīng)驗(yàn)分享)

    這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫(kù)常見(jiàn)的優(yōu)化操作,文章總結(jié)的都是個(gè)人日常開(kāi)發(fā)使用mysql數(shù)據(jù)庫(kù)的經(jīng)驗(yàn)所得,其中包括Index索引、少用SELECT*、EXPLAIN SELECT以及開(kāi)啟查詢緩存等相關(guān)資料,相信會(huì)對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn)

    MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn)

    在MySQL中,可以通過(guò)指定查詢使用的索引來(lái)提高查詢性能和優(yōu)化查詢執(zhí)行計(jì)劃,本文就來(lái)介紹一下MySQL查詢時(shí)指定使用索引的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • mysql主從服務(wù)器同步心得體會(huì)

    mysql主從服務(wù)器同步心得體會(huì)

    原來(lái)看過(guò)MYSQL同步數(shù)據(jù)的實(shí)現(xiàn),可是自己還沒(méi)有動(dòng)過(guò)手,今天沒(méi)什么事就玩一玩,正好在旁邊有另一臺(tái)空電腦,都在同一個(gè)路由器下。哈哈,正好。
    2008-06-06
  • Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn)

    Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn)

    在MySQL中刪除一個(gè)大表中的數(shù)據(jù)時(shí),需要特別注意操作的性能和對(duì)系統(tǒng)的影響,本文主要介紹了Mysql刪除幾億條數(shù)據(jù)表中的部分?jǐn)?shù)據(jù)的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03

最新評(píng)論

兴和县| 漾濞| 榆林市| 南靖县| 广平县| 晋江市| 阿合奇县| 新巴尔虎右旗| 汤阴县| 辽宁省| 蛟河市| 工布江达县| 班玛县| 嵊泗县| 洞头县| 双桥区| 鄂尔多斯市| 榕江县| 保德县| 巴中市| 南召县| 岳池县| 信阳市| 巫溪县| 竹溪县| 洞口县| 乐山市| 全椒县| 皋兰县| 彝良县| 海晏县| 瑞金市| 临澧县| 顺义区| 泽普县| 连云港市| 突泉县| 邛崃市| 阿荣旗| 荆州市| 潼关县|