2016-03-13 33 views
-2

插入後,我怎樣才能使用觸發器來對每條記錄得到最後的ID在MySQL

INSERT INTO table1_seqdocument VALUES (NULL); 
    SET NEW.tracknum = CONCAT('DOC', LPAD(LAST_INSERT_ID(), 3, '0')); 

創建一個ID的最後一個INSERT語句

IM的ID,我需要的是ID爲其他表

這個,這是我的插入語句

INSERT INTO tble_transaction 
    (
     tracknum 
    ,signatoryid 
    ,signed 
    ,status 
    ,signatorylevel 
) 
    VALUES 
    (?,?,?,?,?) 

我想要的是找回ID和將它用於另一個插入語句,但使用其他表。可能嗎?謝謝

+0

請出示完整的創建觸發器聲明。它在'tble_transaction'上嗎? – trincot

+0

我無法重現該問題。你的代碼發佈後,工作正常:請參閱[小提琴](http://sqlfiddle.com/#!9/9aaee/1)。請提供'create table'和'create trigger'語句來查看可能的錯誤。您是否定義了主鍵和auto_increment? – trincot

+0

使用數據庫內部作爲某種超出數據庫範圍的有意義的值僅僅是要求麻煩。重新思考你的設計。 – Strawberry

回答

0

您可以使用@@身份

SELECT @@IDENTITY AS [@@IDENTITY]; 
0

LAST_INSERT_ID()只能告訴你最近的自動生成的ID的ID爲整個數據庫的連接,而不是爲每個單獨的表,這是也爲什麼查詢應該只讀取SELECT LAST_INSERT_ID() - 而不指定表。只要您在該連接上激發另一個INSERT查詢,它就會被覆蓋。如果在插入某個表時需要生成的ID,則必須在執行此操作後立即運行SELECT LAST_INSERT_ID()(或者使用某些爲您執行此操作的API函數)。

如果您希望當前最新的ID在任意表中,您必須在該表上執行SELECT MAX(id),其中id是您的ID列的名稱。但是,如果另一個連接管理在您自己的INSERT和您選擇的ID之間執行INSERT,則該行不一定是最近生成的ID,以防該行被刪除,也不一定是從您的連接生成的。

(根據記錄,查詢實際上要返回該數據庫連接,其中N是在表1的行數在最近生成的ID N行。)

+1

Asker已經在單次插入後立即使用'LAST_USER_ID()'。我甚至不會建議'選擇max(id)'。你的最後一行與這個問題有什麼關係?在問題中沒有N行查詢,也沒有table1。 – trincot