2017-08-11 54 views
-1

同時SQL查詢我有一個奇怪的問題:限制爲一個用戶

基本上,我開發了一個PHP的形式,當由用戶提交表單將proccess具有多個值的INSERT查詢:

INSERT INTO tbl_name 
     (id, colB, colC) 
VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?) [,...] 

到目前爲止沒有問題。問題是,一對夫婦的原因(不相關)我必須手動插入,我要去這個查詢之前插入所以我打算也讓這個查詢的行的ID:

SELECT MAX(id) FROM tbl_name WHERE id < x 

所以我可以把id從哪裏開始我的查詢。

指定查詢將比普通查詢花費的更多,因爲它們是外部數據庫中的查詢,所以INSERT查詢大約需要2-3s。

的問題是:

如果一個用戶將要提交表單,他取參考ID,例如45然後在插入查詢進行處理:

INSERT INTO tbl_name 
     (id, colB, colC) 
VALUES (45, 2, 2), (46, 5, 7), (47, 1, 4) [,...] 

但是插入期間查詢另一個用戶提交表單,並且他將作爲處理另一個用戶的行的ID的一個ID作爲參考ID。

我該如何避免這個問題?我想爲一個用戶限制併發的sql查詢,我只是爲網站使用,但我不知道如何去做。還有其他解決方案?或者,也許MySQL已經有這個問題的預防?謝謝。

+0

您是否擁有用戶的唯一ID,並且可以更改表格模式? – cgTag

+0

使用交易,然後下一個用戶將不會做任何事情,直到當前用戶完成。 –

+0

是的,我有一個獨特的ID,我可以改變它。這是一個關於用戶項目的表格,並且由於我正在從網站處理它,所以我必須將行ID與已在其中的其他行ID分開。 – Keaire

回答

3

MySQL支持自動增加行,這將完全避免您的問題。使用這將有兩個好處:你不需要擔心併發用戶 - 數據庫將只是自動添加下一個ID,而且你不必再敲兩次數據庫 - 一次選擇ID和一次插。 This MySQL link顯示如何將列設置爲自動增量。