[英]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.