详解MySQL的LAST_INSERT_ID()函数:返回最后插入的行的 ID

  • Post category:MySQL

LAST_INSERT_ID()函数是MySQL中用来获取最近一次插入操作自动生成的主键的函数,主要用于在后续操作中需要使用新插入的数据的主键值时进行调用。下面将详细介绍如何使用该函数以及提供两个实例。

函数作用

  • 用于返回最近一次INSERT语句所生成的AUTO_INCREMENT字段的值
  • 该函数在同一个连接上,返回的是当前连接上最后一次的自增长值

函数使用方法

在执行INSERT语句之后,可以直接在后面使用SELECT LAST_INSERT_ID()语句来获取新插入数据的主键值。

INSERT INTO `mytable`(`name`,`age`) VALUE('Alice', 22);
SELECT LAST_INSERT_ID();

值得注意的是,LAST_INSERT_ID()函数仅适用于使用AUTO_INCREMENT关键字创建的自增长字段,如果使用其他方式创建主键,则无法使用此函数获取到主键值。

函数示例

示例一:获取新插入数据的主键值

创建一个主键为自增长的表students,并插入一条数据:

CREATE TABLE `students` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `students`(`name`, `age`) VALUES('Bob', 18);

使用LAST_INSERT_ID()函数获取新插入数据的id值:

SELECT LAST_INSERT_ID();

输出结果:1

示例二:获取后续操作需要使用的主键值

在一个事务中需要先向students表中插入一个学生信息,然后再向scores表中插入该学生的成绩,为了避免并发操作时产生错误,需要在事务中保证使用同一个数据库连接,在此情况下可以使用LAST_INSERT_ID()来获取新插入数据的id值并插入记录到scores表中:

START TRANSACTION;
INSERT INTO `students`(`name`, `age`) VALUES('Bob',18);
INSERT INTO `scores`(`student_id`, `score`) VALUES(LAST_INSERT_ID(), 80);
COMMIT;

注:scores表中的student_id字段作为外键指向students表中相应的主键值。

总结

LAST_INSERT_ID()函数是MySQL中非常有用的函数,通常在插入新数据之后需要获得插入数据的主键值时就会用到它,使用此函数一定要加强对事务的管理,并确保数据库连接处于同一连接下,以防止插入及使用插入数据的操作出现错误。