Mysql 获取最近插入的主键

Mysql 获取最近插入的主键,mysql,scala,auto-increment,slick,Mysql,Scala,Auto Increment,Slick,有人知道如何在Slick中获取自动递增列的最新插入id吗?我想使用Slick执行条目插入,然后获取最近使用Scala/Slick插入的主列id的值,然后将其用于另一次插入。您可以使用返回: val someTable = TableQuery[MyEntity] val thisId = (someTable returning someTable.map(_.id)) += someRow 请注意,这将返回插入行的id(该行可能是最近的,也可能不是最近的),因此只有在将该行存储在数据库中并插

有人知道如何在Slick中获取自动递增列的最新插入id吗?我想使用Slick执行条目插入,然后获取最近使用Scala/Slick插入的主列id的值,然后将其用于另一次插入。

您可以使用
返回

val someTable = TableQuery[MyEntity]
val thisId = (someTable returning someTable.map(_.id)) += someRow
请注意,这将返回插入行的id(该行可能是最近的,也可能不是最近的),因此只有在将该行存储在数据库中并插入后才会返回

这样做的问题是,您不应该将其用于另一个插入,您有一个自动递增列的原因是您希望DB层为您处理该列并动态分配标识符,考虑在您的情况下会发生什么,您插入一行并返回一个id,比如10,然后,您希望插入一个id为11的行,但不知道应用程序的其他部分当前是否在会话中并插入一行,如果插入成功,您将尝试插入一个id重复的行并返回异常

此外,id可能不是连续的,这意味着如果删除某些行,列中可能会有洞,在这种情况下,自动增量将不会填充这些洞,而只是从上一个id继续递增id值

如果您想从信息模式中选择它,您可以使用纯SQL(恐怕slick允许对信息模式进行此查询):


摘自post,从评论中注意到,通常不能保证返回的id未被使用。

当我说进行另一次插入时,我的意思是将返回的id用作该表的外键,插入到另一个表中,不向同一个表中插入。这样做是有意义的,
返回
就是您要寻找的,当我有外键并且需要捕获该列的id时,这是我使用的一种常见模式。
SELECT 
  Auto_increment 
FROM 
  information_schema.tables 
WHERE 
  table_name='the_table_you_want';