3
有誰知道如何獲取最新插入的自動遞增列的ID在Slick?我想使用Slick執行條目的插入,然後獲取最近插入的主列ID的值,然後將其用於其他插入。獲取最近插入的主鍵浮標
有誰知道如何獲取最新插入的自動遞增列的ID在Slick?我想使用Slick執行條目的插入,然後獲取最近插入的主列ID的值,然後將其用於其他插入。獲取最近插入的主鍵浮標
您可以使用returning
:
val someTable = TableQuery[MyEntity]
val thisId = (someTable returning someTable.map(_.id)) += someRow
注意它返回插入行的ID(可能或不可能是最新的),該行被存儲,因此只有在插入到數據庫中。
這個問題是,你不應該使用它來進行另一次插入,你有一個自動遞增列的原因是你希望DB層爲你處理該列並動態地分配一個標識符,想想在你的情況下會發生什麼,你插入一行並取回一個id,比如說10,然後你想插入一個id爲11的行,但是你不知道你的應用程序的某個其他部分是否正在進行會話,插入一行,如果它成功並且您將嘗試插入具有重複ID的行並取回異常。
此外,ids可能不是連續的,這意味着如果某些行被刪除,您可能會在列中出現空洞,在這種情況下,自動增量不會填充這些空洞,而是繼續增加最後一個id的id值。
如果你想從您可以使用純SQL的信息模式選擇它(恐怕光滑允許此查詢的信息模式):
SELECT
Auto_increment
FROM
information_schema.tables
WHERE
table_name='the_table_you_want';
從this後,注意取自評論,在一般不保證返回的ID尚未被使用。
當我說做另一個插入,我的意思是到一個不同的表,使用返回的ID作爲該表的外鍵,而不是插入到同一個表中。 – mp94 2014-09-18 18:22:02
然後它是有道理的,並且「返回」是你正在尋找的東西,這是我使用外部鍵時常用的模式,我需要捕獲該列的id。 – 2014-09-18 18:23:44