我要將數千個查詢運行到SQL中,並且需要防止字段「域」的重複。從來沒有這樣做過,任何幫助將不勝感激。防止使用PHP重複插入到SQL中
回答
您可能希望在字段「Domain」上創建一個「UNIQUE」約束 - 如果您創建兩個在數據庫中具有相同域的行,此約束將引發錯誤。有關說明,請參閱this tutorial in W3C school -
http://www.w3schools.com/sql/sql_unique.asp
如果這沒有解決您的問題,請澄清你選擇使用數據庫(MySQL的?)。
注意:這個約束與您選擇的PHP作爲一種編程語言完全分開,它是一個SQL數據庫定義的事情。在SQL中表達這種約束的一個巨大優勢是,即使人們從數據庫導入/導出數據,您的應用程序有問題或其他應用程序共享數據庫時,也可以信任數據庫以保留約束。
我不太確定我是否理解你的問題,但也許你正在尋找SQL的"UNIQUE" constraint。如果查詢嘗試將預先存在的值插入到字段中,您(PHP)將收到關於此約束違規的通知。
有很多方法可以解決這個問題。您可以在該列上設置唯一約束(如主鍵)。如果該域也被插入,這將導致插入失敗。您也可以插入所有重複的域名,稍後再刪除它們。如果不是那麼多域重複的話,這將會很好。在查找重複行時,已經發布了幾個問題。
如果這是一個絕對的數據庫完整性要求(它不可能改變,現有數據也沒有這個問題),我會強制它在數據庫中有一個唯一的約束。
只要在嘗試之前或之後檢測它以通知用戶,就可以使用許多技術。
這可以用sql做,而不是用php。
我假設你正在使用MySQl,但是相同的原則將與不同的數據庫一起工作。
使域列成爲主鍵。 (有意義,因爲它必須唯一。)
而不是使用INSERT,請使用UPDATE。
如果主鍵已經存在(即您試圖放入表中),更新將更新現有的元組,而不是創建新的元組。
所以你會覆蓋現有的數據,如果它是不同的,如果它是相同的更新將被跳過。
數據來自哪裏?這是你只想運行一次還是一次或者經常運行?如果域值已經存在,你只是想跳過插入或做別的事情(即增加一個計數器)?
根據您的答案,有很多可能的解決方案:
預排序數據,消除重複,然後插入 (假定相對靜態的數據,空表開始)
在PHP中使用關聯數組作爲本地域值緩存 (如果表已經包含數據,則從讀取現有內容開始; 不是線程安全的,但是一次只能運行一次即可使用)
製作域內唯一的列,寫包裝代碼來處理返回錯誤
製作領域唯一或主鍵列,使用ON DUPLICATE KEY子句: INSERT INTO MYDATA(域,計數)VALUES (' firstdomain',1), ( 'seconddomain',1), ( '指向ThirdDomain',1) ON DUPLICATE KEY UPDATE計數=計數+ 1
插入所有數據插入表中,然後刪除重複
請注意,批處理插入(即對每個語句使用多個值子句)可以顯着更快。
- 1. 防止重複插入到SQL數據庫,必須使用PetaPoco
- 2. 防止重複行插入php/mysql
- 3. 使用updatepanel防止重複插入
- 4. 防止重複插入時
- 5. Grails防止重複插入
- 6. 防止重複enteries sql php
- 7. SQL防止重複輸入
- 8. 如何防止將重複數據插入到SQL Server表中?
- 9. PHP/simpleXML - 防止將重複的XML值插入到數組中
- 10. 防止使用SQL Server 2008插入重複行
- 11. 防止重複值在ORACLE中插入
- 12. 我的sql防止在查找表中重複插入
- 13. 防止將重複的輸入插入到SQL服務器數據庫中?
- 14. 在php/mysql中防止重複行插入
- 15. 在插入datagridview之前防止重複
- 16. MySQL的自動防止重複插入
- 17. 防止重複表格插入
- 18. 如何防止插入重複記錄?
- 19. 如何防止重複插入表
- 20. CodeIgniter Active Record:防止重複插入
- 21. jquery array:防止重複插入
- 22. 如何防止在Java數據庫中使用重複插入?
- 23. 防止在PHP重複SQL INSERT
- 24. 防止插入SQL注入
- 25. 防止重複SQL條目並將數據插入PHP中的SQLite
- 26. 防止在codeigniter中使用php和mysql重複輸入
- 27. SQL Server和重複插入的預防
- 28. 使用INSERT IGNORE防止重複輸入
- 29. 防止重複插入到數據庫中
- 30. PHP的MySQL防止快速的形式重複插入提交