我要将数千个查询运行到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. 如何防止将重复数据插入到SQL Server表中?
- 5. 防止使用SQL Server 2008插入重复行
- 6. 防止重复值在ORACLE中插入
- 7. 我的sql防止在查找表中重复插入
- 8. 在php/mysql中防止重复行插入
- 9. MySQL的自动防止重复插入
- 10. 如何防止插入重复记录?
- 11. 防止重复SQL条目并将数据插入PHP中的SQLite
- 12. 防止在codeigniter中使用php和mysql重复输入
- 13. 使用INSERT IGNORE防止重复输入
- 14. 防止重复插入到数据库中
- 15. 使用Observable Angular时防止插入重复2
- 16. 如何使用SqlBulkCopy来防止重复插入?
- 17. 防止SQL注入与PHP
- 18. 防止SQL注入的PHP
- 19. 防止SQL Server中的重复记录
- 20. 防止SQL中的重复预订
- 21. 防止SQL查询中的重复项?
- 22. 如何防止在Angularjs中插入重复记录
- 23. 在php中防止SQL注入
- 24. 使用INNER JOIN和ON防止重复使用此SQL查询
- 25. PHP + SQL脚本 - 防止SQL注入
- 26. 如何在使用Oracle的插入查询中防止重复的行?
- 27. 防止在Android连接的appengine中使用jdo的重复表插入
- 28. PHP - 防止插入语句上的SQL注入
- 29. 停止插入重复
- 30. 使用PHP防止mySQL数据库中的重复项