python-mysql事物
阿新 • • 發佈:2018-01-05
密碼 日常生活 ola 工作 body imp 說明 ack abi
MySQL 事務
MySQL 事務主要用於處理操作量大,復雜度高的數據。簡單的理解就是:完成一件事情的多個mysql語句的集合就是一個事務了,可能有人會想,我的mysql本來就是一句一句語句執行的啊,為什麽要弄什麽事務呢?但是在日常生活中,比如張三有15620元錢(在支付寶上面),李四有240元,現在張三要給李四轉600元。這時候我們需要數據庫中,在張三的15620上減掉600,在李四的240上面加上600。這是倆個mysql的語句,但是如果我們執行的時候,在減掉張三的語句成功執行之後,第二句語句執行失敗(因為某一種原因)。那是不是這600塊就憑空消失了呢?很明顯,支付寶不可能讓這樣的事情發生。所以我們要把這倆個語句綁在一塊,要麽一起執行成功,要麽就都執行失敗。至於怎麽做到這個 就看後面的了
執行事務
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為ACID特性。
- 原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麽都做,要麽都不做。
- 一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
- 隔離性(isolation)。一個事務的執行不能被其他事務幹擾。即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相幹擾。
- 持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
對於支持事務的數據庫, 在Python數據庫編程中,當遊標建立之時,就自動開始了一個隱形的數據庫事務。commit()方法遊標的所有更新操作,rollback()方法回滾當前遊標的所有操作。每一個方法都開始了一個新的事務。(在上一個筆記上面寫了mysql語句在python中的使用)
以上面轉賬為例:
1
2
3 4 5 #!/usr/bin/python 6 7 # -*- coding: UTF-8 -*- 8 9 import MySQLdb 10 11 #包的導入 12 13 db = MySQLdb.connect("ip地址,本機為localhost","用戶名","密碼","表名") 14 15 #打開數據庫的連接 16 17 cursor = db.cursor() 18 19 #使用cursor()方法獲得操作遊標 20 21 try: 22 # 執行sql語句 23 cursor.execute("update account set money=money-600 where name=‘zhangsan‘") 24 cursor.execute("update account set money=money+600 where name=‘lisi‘") 25 # 提交到數據庫執行 26 db.commit() 27 except: 28 # 發生錯誤時回滾 回滾到獲取遊標的位置開始重新執行 看代碼上面的文字有說明 29 db.rollback() 30 31 db.close() 32 33 #關閉數據庫的連接
python-mysql事物