• Python
  • 通过事务获得刚插入MySQL最新数据的自增ID

这是因为在MySQL中,自增 ID 是由数据库自动生成的,当多个连接同时向表中插入数据时,每个连接都会获取一个新的自增 ID。如果没有采取适当的并发控制措施,就可能出现获取到其他连接插入的数据的 ID 的情况。

为了避免这种问题,可以使用事务来确保数据操作的原子性。在事务中执行插入操作并获取自增 ID,可以确保同一个事务中的操作是一致的。示例如下:

import pymysql
from pymysql.pool import PyMySQLConnectionPool

pool = PyMySQLConnectionPool(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database',
    max_connections=10,
    charset='utf8mb4'
)

def insert_data():
    try:
        conn = pool.get_connection()
        cursor = conn.cursor()

        # 开启事务
        conn.begin()

        # 插入新数据
        sql = "INSERT INTO your_table (name, age) VALUES (%s, %s)"
        values = ('John Doe', 30)
        cursor.execute(sql, values)

        # 获取自增id
        new_id = cursor.lastrowid

        # 提交事务
        conn.commit()

        print(f"New data inserted with ID: {new_id}")

    except Exception as e:
        print(f"Error: {e}")
        # 出现异常时回滚事务
        conn.rollback()
    finally:
        cursor.close()
        conn.close()

在这个示例中,我们在执行插入操作的时候,先开启了一个事务。在事务中执行插入操作并获取自增 ID,然后提交事务。这样可以确保在同一个事务内获取的 ID 就是当前插入操作产生的 ID。

即使有多个任务同时执行 insert_data(),由于使用了事务,每个任务获取到的 new_id 都是当前插入操作产生的 ID,不会出现获取到其他连接插入的数据 ID 的情况。