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官方文档
相关文章
评论区