gpt4 book ai didi

php如何在向mysql插入数据之前检查是否存在

转载 作者:太空宇宙 更新时间:2023-11-03 11:44:22 24 4
gpt4 key购买 nike

我有一张 table (id、位置、时间戳、类型、值)

位置/时间戳/类型可以重复,
但位置+时间戳+类型是唯一的


1, "巴黎", 1474986000, "a", "100"
2, "伦敦", 1474986000, "a", "90"
3、“巴黎”、1474986000、“b”、“12”
4、“伦敦”,1474986000,“b”,“13”
5、“巴黎”、1474990000、“一”、“100”
6、"伦敦", 1474990000, "a", "100"
7、"巴黎", 1474990000, "a", "100"
8、"伦敦", 1474990000, "a", "100"


我尝试在使用 select 语句插入之前检查是否存在,但我有 >100000 条记录,它花费了很多时间来检查

还有其他解决方案可以解决这个问题吗?谢谢~

最佳答案

如果该列组合存在唯一约束,假设这些列都声明为 NOT NULL...

您可以创建一个唯一索引。该索引将通过适当的 SELECT 语句加快对现有行的“搜索”。

 CREATE UNIQUE INDEX mytable_UX1 ON mytable (location, timestamp, type)

但是如果您定义了一个 UNIQUE INDEX,并且目标只是添加缺少的行,您可以使用 INSERT IGNORE

 INSERT IGNORE INTO mytable ( ... ) VALUES ( ... ), ( ... )

尝试插入违反唯一约束的行不会引发错误。 IGNORE 关键字导致 MySQL 不仅忽略重复键违规,还将其他错误转化为警告。

If you use the IGNORE keyword, errors that occur while executing the INSERT statement are ignored. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted. With IGNORE, the row is discarded and no error occurs. Ignored errors may generate warnings instead, although duplicate-key errors do not.

我使用的另一种技术是在 INSERT 本身内执行检查,使用 INSERT ... SELECT ... 和 SELECT 语句,包括反连接以消除已经存在的行.此方法仅检查表中已存在的行,而不是 SELECT 语句可能产生的“重复项”。

关于php如何在向mysql插入数据之前检查是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com