2011-06-02 87 views
0

我有許多表格是「共享」一個自動遞增的主鍵 - 這是通過插入時的觸發器,它看起來像這樣完成的:沒有自動遞增上次插入行信息PK

FOR EACH ROW 
    BEGIN 
     INSERT INTO master (time) VALUES (NOW()); 
     SET NEW.id = LAST_INSERT_ID(); 
    END 

這會爲剛剛插入的行生成PK。然而,這確實造成了我似乎無法弄清楚那個ID是什麼的問題。 last_insert_id顯然沒有返回任何內容,因爲上述語句沒有在被認爲是「當前連接」的地方執行。

有沒有方法可以訪問連接上最近插入的行而無需自動遞增主鍵?

更新:作爲臨時(?)度量,我已經刪除了觸發器,現在通過在我的模型中插入master來生成ID。看起來好像會更好,如果我能以某種方式返回觸發器設置的值。

+0

那麼如果你沒有標識符(PK),你將如何識別哪一行被插入? – 2011-06-02 18:32:52

回答

1

doc會說:「對於更改[LAST_INSERT_ID]值的存儲函數和觸發器,函數或觸發器結束時會恢復該值,因此以下語句看不到更改的值。」

試試一個存儲過程,它可以做你的兩個INSERTS並返回分配的ID。

或者,放棄處理「Oracle方式」,喝MySql Kool-Aid,並在表上使用自動遞增的id。

+0

如果您閱讀原始問題,您會看到爲什麼我不使用自動遞增ID - 自動遞增ID在主表上,並由其他3個表共享。不需要插入到PHP代碼中的「id generator」表中,但它的可行性與我的編輯一樣。我可以嘗試存儲過程路由,但我的經驗是有限的。 – Will 2011-06-03 01:32:39

+0

我讀了你原來的問題,看到你在分享主表,甲骨文。我不相信(儘管我現在不能證實你已經編輯了它),但你沒有,但是,解釋你爲什麼做這樣的事情。巨大差距。 – 2011-06-08 21:32:10

相關問題