mysql - increase - sql create table primary key auto increment



從mysql插入查詢中獲取新記錄主鍵ID? (4)

好吧,讓我們說我正在做一個mysql INSERT到我的一個表中,並且表中的item_id列被設置為autoincrementprimary key

如何讓查詢在同一查詢中輸出新生成的主鍵item_id的值?

目前我正在運行第二個查詢來檢索身份證,但這似乎不太好,因為這可能會產生錯誤的結果...

如果這是不可能的,那麼確保我檢索正確ID的最佳做法是什麼?


Answer #1

謹防 !! 如果試圖在PHP中返回此主鍵值,則返回“LAST_INSERT_ID()”

我知道這個線程沒有被標記為php,但對於任何遇到這個答案的人來說,使用標準的mysql_query調用來返回一個PHP腳本插入的MySQL插入標識 - 它不會工作,並且不捕獲SQL錯誤並不明顯。

較新的mysqli支持多個查詢 - 其中LAST_INSERT_ID()實際上是來自原始的第二個查詢。

IMO使用單獨的SELECT來標識最後一個主鍵比使用前一個INSERT操作生成的AUTO_INCREMENT ID的可選mysql_insert_id()函數更安全。


Answer #2

在這裡你在找什麼!

select LAST_INSERT_ID()

這是在SQL Server中使用的SCOPE_IDENTITY()函數的最佳選擇。

您還需要記住,只有在Insert查詢觸發Last_INSERT_ID() ,這才會起作用。 那就是查詢返回在模式中插入的id。 您無法獲取特定表格的最後插入的ID。

有關更多詳細信息,請通過鏈接相當於mySQL中的SQLServer函數SCOPE_IDENTITY()?


Answer #3

如果您在插入一行之前需要該值:

CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
    RETURNS BIGINT
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

    DECLARE Value BIGINT;

    SELECT
        AUTO_INCREMENT INTO Value
    FROM
        information_schema.tables
    WHERE
        table_name = TableName AND
        table_schema = DATABASE();

    RETURN Value;

END

你可以在插入中使用它:

INSERT INTO
    document (Code, Title, Body)
VALUES (                
    sha1( concat (convert ( now() , char), ' ',   getAutoincrementalNextval ('document') ) ),
    'Title',
    'Body'
);

Answer #4

LAST_INSERT_ID()文檔:

生成的ID在每個連接的基礎上保存在服務器中

也就是說,如果您同時對腳本有兩個單獨的請求,它們不會影響彼此的LAST_INSERT_ID() (除非您使用的是持久連接)。





auto-increment