2011-03-23 105 views
3

我希望能夠防止重複的SQL文本字段行。也就是說,如果第1行的名稱字段已被定義爲「John Smith」,我不希望它能夠添加另一個「John Smith」(與該名稱一樣常見)。防止重複的SQL條目

我試着檢查它是否存在於插入時,但問題是,如果您同時打開兩個瀏覽器窗口並單擊同時提交,他們都會檢查,檢查將清除,然後他們如果它們足夠接近,就會插入。

哦,這是在PHP網站上。

謝謝!

+0

你可以在mysql的字段中使用唯一索引嗎?然後當php做一個插入句柄重複輸入錯誤。 – Jacob 2011-03-23 22:56:05

回答

12
CREATE UNIQUE INDEX idxname ON tablename (fieldname); 

添加此指標將確保fieldname領域沒有重複的條目將被記錄到tablename表。

您將得到第二個客戶端的MySQL錯誤。你應該在你的PHP代碼中處理這個問題,並再次提交表單(而不是顯示錯誤信息)。

其他可能性(對於更復雜的場合)是LOCK功能。如果在檢查之前鎖定表,然後插入記錄,併發操作(在第二個瀏覽器窗口中)將會延遲,直到您釋放鎖。然後記錄將被保存,所以第二個PHP腳本將看到它並處理該sitation。

+2

額外加上這一點是大多數數據庫供應商將觸發一個特定的錯誤的唯一約束違規,這意味着你可以在腳本中捕獲它 – Phil 2011-03-23 22:56:39

+0

優秀的答案,謝謝!與我現有的代碼非常相稱,因爲它會將它踢到一個頁面上,表示您已經完成了它。謝謝! – Kevin 2011-03-24 00:12:30

0

DISTINCT也可以用來選擇唯一的行。

... 
select distinct * 
    from table1 
...