MAX(id)

通过MAX()函数获取某个表的ID的最大值,手动自增后用于insert语句,代码如下:

# 获取table_name表的当前最大id
select MAX(id) into @max_id from table_name;
# 手动自增id
set @max_id = @max_id + 1;
# 使用id
insert into table_name (id, name) values (@max_id, '测试');

这个方式在多人同时使用数据库时,可能会导致id自增冲突。

LAST_INSERT_ID()

通过使用LAST_INSERT_ID()函数获取,上一次的自增id值,代码如下:

# 在table_name表添加一条数据,不指定id,使用数据库自增id
insert into table_name (name) value ('测试');
# 获取刚才这条SQL的自增id值
set @id = LAST_INSERT_ID();
# 使用自增id值,将数据插入关联表,t_id为table_name表的主键,t1_id为另一个表的主键
insert into table_relation (t_id, t1_id) values (@id, 1);

这个方式获取自增id与表无关,LAST_INSERT_ID()是基于连接的,每个MySQL连接的LAST_INSERT_ID()函数的值都是独立维护的。

@@IDENTITY

IDENTITY是MySQL的一个系统变量,使用@@可以获取某个系统变量的值。

通过@@IDENTITY获取,上一次的自增id值,代码如下:

# 在table_name表添加一条数据,不指定id,使用数据库自增id
insert into table_name (name) value ('测试');
# 获取刚才这条SQL的自增id值
set @id = @@IDENTITY;
# 使用自增id值,将数据插入关联表,t_id为table_name表的主键,t1_id为另一个表的主键
insert into table_relation (t_id, t1_id) values (@id, 1);

根据MySQL官方文档描述,这个系统变量和LAST_INSERT_ID变量一样,是为了兼容其他数据库才存在的变量。

LAST_INSERT_ID变量是LAST_INSERT_ID()的返回值,与LAST_INSERT_ID()函数的情况相同,也是基于连接的,每个MySQL连接的LAST_INSERT_ID变量是独立维护的。

参考

MySQL官方文档

MySQL 5.7 官方文档 last_insert_id

MySQL 5.7 官方文档 系统变量 identity

MySQL 5.7 官方文档 系统变量 last_insert_id

相关文章

MySQL获取自增ID的四种方法