获取最近插入的主键光滑

时间:2014-09-18 18:02:24

标签: mysql scala auto-increment slick

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

1 个答案:

答案 0 :(得分:1)

您可以使用returning

val someTable = TableQuery[MyEntity]
val thisId = (someTable returning someTable.map(_.id)) += someRow

请注意,这将返回插入行的id(可能是也可能不是最新的),因此只有在将行存储在数据库中后才会显示。

这个问题是你不应该把它用于另一次插入,你有一个自动增加列的原因是你希望DB层为你处理那个列并动态分配一个标识符,想一想可能发生在你的情况下,你插入一行并获得一个id,比方说10,然后你想插入一个id为11的行,但你不知道你的应用程序的其他部分当前是否在会话和插入一行,如果确实如此,您将尝试插入一个具有重复ID的行并返回异常。

此外,ID可能不是顺序的,这意味着如果某些行被删除,您可能会在列中出现空洞,在这种情况下,自动增量不会填充这些空洞,而只是继续增加最后一个ID的id值。

如果你想从信息模式中选择它,你可以使用普通的SQL(恐怕光滑允许对信息模式进行这种查询):

SELECT 
  Auto_increment 
FROM 
  information_schema.tables 
WHERE 
  table_name='the_table_you_want';

取自this帖子,请注意评论,一般情况下,不保证返回的ID尚未使用。