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