MySQL 插入后如何返回 ID

在开发过程中,经常会遇到需要插入一条数据到数据库中,并且获取插入后的 ID 的需求。MySQL 提供了几种方式来实现这个目标,本文将详细介绍这些方式,并给出相应的代码示例。

方案一:使用 LAST_INSERT_ID() 函数

MySQL 提供了 LAST_INSERT_ID() 函数来获取最后插入的自增 ID。该函数会返回上一次插入操作生成的自增 ID 值。我们可以在插入数据之后立即调用该函数来获取插入的 ID。

下面是一个示例代码:

import mysql.connector

# 创建连接
cnx = mysql.connector.connect(user='root', password='password',
                              host='127.0.0.1',
                              database='mydatabase')

# 创建游标
cursor = cnx.cursor()

# 插入数据
insert_query = "INSERT INTO mytable (name) VALUES ('John')"
cursor.execute(insert_query)
cnx.commit()

# 获取插入后的 ID
cursor.execute("SELECT LAST_INSERT_ID()")
result = cursor.fetchone()
inserted_id = result[0]

# 打印插入的 ID
print("插入的 ID 是:", inserted_id)

# 关闭游标和连接
cursor.close()
cnx.close()

上述代码首先创建了一个数据库连接,并创建了一个游标对象来执行 SQL 查询。然后,我们插入了一条数据到名为 mytable 的表中,并使用 LAST_INSERT_ID() 函数获取插入的 ID。

方案二:使用 RETURNING 语句

另一种方式是使用 RETURNING 语句,该语句可在插入数据之后立即返回插入的 ID。

下面是一个示例代码:

import mysql.connector

# 创建连接
cnx = mysql.connector.connect(user='root', password='password',
                              host='127.0.0.1',
                              database='mydatabase')

# 创建游标
cursor = cnx.cursor()

# 插入数据并返回 ID
insert_query = "INSERT INTO mytable (name) VALUES ('John') RETURNING id"
cursor.execute(insert_query)
inserted_id = cursor.fetchone()[0]

# 打印插入的 ID
print("插入的 ID 是:", inserted_id)

# 关闭游标和连接
cursor.close()
cnx.close()

上述代码中,我们使用 RETURNING 语句在插入数据之后立即返回插入的 ID。在执行完插入操作后,我们可以使用 cursor.fetchone()[0] 获取插入的 ID。

方案三:使用 SELECT MAX(id) 语句

还有一种方式是使用 SELECT MAX(id) 语句来查询最大的自增 ID。该方法适用于自增 ID 是连续递增的情况。

下面是一个示例代码:

import mysql.connector

# 创建连接
cnx = mysql.connector.connect(user='root', password='password',
                              host='127.0.0.1',
                              database='mydatabase')

# 创建游标
cursor = cnx.cursor()

# 插入数据
insert_query = "INSERT INTO mytable (name) VALUES ('John')"
cursor.execute(insert_query)
cnx.commit()

# 获取插入的 ID
cursor.execute("SELECT MAX(id) FROM mytable")
result = cursor.fetchone()
inserted_id = result[0]

# 打印插入的 ID
print("插入的 ID 是:", inserted_id)

# 关闭游标和连接
cursor.close()
cnx.close()

上述代码中,我们通过 SELECT MAX(id) 语句查询表中最大的自增 ID,即为插入的 ID。

总结

本文介绍了三种在 MySQL 插入后获取 ID 的方案,并给出了相应的代码示例。根据实际情况选择合适的方案来获取插入的 ID。另外,值得注意的是,在并发插入数据的场景下,使用 LAST_INSERT_ID() 函数或 RETURNING 语句是更可靠的方式,而 SELECT MAX(id) 方式可能会出现并发问题,因此需要谨慎使用。


关系图如下:

erDiagram
    MYDATABASE {
        +id [PK]
        name
    }

甘特图如下:

gantt
    title MySQL 插入后如何返回 ID
    dateFormat  YYYY-MM-DD
    section 方案一
    插入数据: 2022-12-01,