簡體   English   中英

MySQL的LAST_INSERT_ID()問題

[英]Problem with MySQL's LAST_INSERT_ID()

我對LAST_INSERT_ID()有問題。

每次使用它時,我都需要打開和關閉一個新連接。 這大大減慢了我的應用程序的速度。 我需要做很多insert語句,每個插入的end都將在同一連接上插入的ID。 如何在沒有並發問題的情況下從特定表中獲取與MySQl,ODBC和C#相同連接的最后插入的ID?

這是我的代碼:

#region Private Variables
private static DataAccess _DataAccess = null;
private static object _SyncLock = new object();
private OdbcConnection myConnection = null;
#endregion

#region Instance Method
public static DataAccess Instance
{
    get
    {
        lock (_SyncLock)
        {
            if (_DataAccess == null)
                _DataAccess = new DataAccess();
            return _DataAccess;
        }
    }
}
#endregion

#region Constractors
public DataAccess()
{
    myConnection = new OdbcConnection(stringConnDB);
    myConnection.Open();
}
#endregion

每次使用它時,我都需要打開和關閉一個新的連接

不,您不需要新的連接。 您應該在插入語句之后在同一連接上使用它。

手冊

生成的ID在每個連接的服務器中維護。 這意味着,通過[返回值LAST_INSERT_ID ]給定的客戶端是第一個AUTO_INCREMENT近期影響的大多數語句生成值AUTO_INCREMENT 該客戶端柱。 即使其他客戶端生成自己的AUTO_INCREMENT值,該值也不會受到其他客戶端的影響。 此行為可確保每個客戶端都可以檢索自己的ID,而不必擔心其他客戶端的活動,也不需要鎖或事務。

為什么您認為需要打開一個新連接? 其實你應該打開一個新的連接,你應該使用last_insert_id()相同的連接上,就一定要得到正確的結果。

如果您嘗試使用新連接進行連接並且似乎可以正常工作,那僅僅是因為連接已被池化,並且您碰巧第二次獲得了相同的連接。 當您開始與多個用戶使用此功能時,它將失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM