pythonでMysqlデータロールバックrollback()と原理分析を実現

3246 ワード

pythonでMysqlデータロールバックrollback()と原理分析を実現
1.pythonでカーソルを複数回executeしてデータコードをコミットする
import pymysql


class MysqlDBUtils(object):

    def __init__(self, host, port, username, password, db):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.db = db
        self.conn = None
        self.cursor = None

    def db_init(self, charset='utf8'):
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.username,
                                    password=self.password, db=self.db, charset=charset)
        self.cursor = self.conn.cursor()

    def sql_execute(self):
        insert_sql1 = "INSERT INTO t_user(user_id, user_name) VALUES (5, '  ');"
        insert_sql2 = "INSERT INTO T_HOBBY(user_id, hobby) VALUES ('     ID', '  ');"
        self.db_init()
        conn = self.conn
        cursor = self.cursor
        try:
            cursor.execute(insert_sql1)
            cursor.execute(insert_sql2)
            cursor.close()  #     

        except Exception as e:
            #cursor.close()  #     
            conn.rollback()
            print(e)
        finally:
            cursor.close()
            conn.commit()
            conn.close()

 
insert_の場合sql 1とinsert_sql 2構文エラーがない場合、executeは最後にcommitでデータベースコミットを行い、データベースへの書き込みに成功します.
insert_sql 1="INSERT INTO t_user(user_id,user_name)VALuES(5,'豆豆');"
insert_sql 2="INSERT INTO T_HOBBY(user_id,hobby)VALuES('2','乗馬');"
でもinsert_sql 1とinsert_sql 2構文エラー
insert_sql 1="INSERT INTO t_user(user_id,user_name)VALuES(5,'ヒヒ');
"insert_sql2 = "INSERT INTO T_HOBBY(user_id,hobby)VALES('私は間違ったID','乗馬');"
この場合dbがあるため.rollback()データロールバック操作なのでinsert_sql1,insert_sql 2のカーソルcursorでの2回の操作はclearを空にするので、最後にfinallyのdbを実行してもよい.commit()操作もinsert_sql 1実行成功
dbを試してみることができます.rollback()コメントを削除するとinsert_sql 1の操作は成功しますinsert_sql 1のデータはデータベースに書き込まれます
まとめ:db.rollback()データロールバックの役割は、データベース操作の原子的な問題を確保することであり、複数回の操作が実行されるか、実行されないかのいずれかです.
データベース・トランザクションのプロパティ
MySQLトランザクションMySQLトランザクションは、主に操作量が多く、複雑度の高いデータの処理に使用されます.たとえば、人員管理システムでは、人員を削除するには、人員の基本資料を削除するだけでなく、ポスト、文章などの人員に関する情報を削除する必要があります.これにより、これらのデータベース操作文はトランザクションを構成します.MySQLでは、Innodbデータベースエンジンを使用しているデータベースまたはテーブルのみがトランザクションをサポートします.トランザクションは、データベースの整合性を維持し、一括SQL文がすべて実行されるか、すべて実行されないかを保証するために使用できます.トランザクションはinsert、update、delete文を管理するために使用されます.一般的に、トランザクションは4つの条件(ACID):原子性(Atomicity、または分割不可能性)、一貫性(Consistency)、隔離性(Isolation、独立性)、持続性(Durability)を満たす必要があります.原子性:トランザクション内のすべての操作は、すべて完了するか、すべて完了しないか、中間の一環で終了しません.トランザクションは実行中にエラーが発生し、このトランザクションが実行されたことがないように、トランザクションが開始される前の状態にロールバックされます.≪コンシステンシ|Consistency|emdw≫:トランザクションが開始される前とトランザクションが終了した後、データベースの整合性は破壊されません.これは、書き込まれた資料がすべてのプリセット規則に完全に合致しなければならないことを示しています.これは、資料の精度、直列性、および後続のデータベースが自発的に所定の作業を完了できることを含む.独立性:データベースでは、複数の同時トランザクションが同時にデータの読み書きと変更を行うことができます.独立性により、複数のトランザクションが同時実行されるときにクロス実行によるデータの不一致を防止できます.トランザクション・アイソレーションは、リード・コミット(Read uncommitted)、リード・コミット(read committed)、リピート可能リード(repeatable read)、シリアル化(Serializable)など、異なるレベルに分けられます.永続性:トランザクションが終了すると、システム障害が発生してもデータの変更は永続的に行われます.(性質参照)