如何在mysql的数据库表中检查ID是否存在

时间:2015-02-02 14:43:19

标签: php mysql

我有一个场景,我运行一个cron并从远程数据库中提取数据并插入本地数据库。

我的专栏中定义了一个唯一键。从远程数据库的数据,我需要绕过本地系统中存在的记录,并插入新的记录。

我无法编写选择查询并每次检查200条记录。如果有任何动态方法,请建议我

2 个答案:

答案 0 :(得分:0)

您可以使用INSERT IGNORE忽略所有重复项。

答案 1 :(得分:0)

我在INSERT IGNORE上运行了一些基准测试。
删除LOCAL表并且不使用IGNORE会有效甚至更高效。

总时间:使用和清空`LOCAL`表
0.4357 - 0.4506秒

INSERT INTO `LOCAL` SELECT * FROM `REMOTE`  WHERE 1
899 row inserted Query took 0.4357 - 0.4506 sec

使用IGNORE (899行)
总时间:0.4090 - 0.4788秒

INSERT IGNORE INTO `LOCAL` SELECT * FROM `REMOTE`  WHERE 1
1 row inserted. Inserted Query took 0.4090 - 0.4788 sec

然后我尝试了这个例程
总时间:0.0006 - 0.0010

$results = mysqli_query("SELECT MAX(`id`) FROM `LOCAL` WHERE 1");
$row = mysqli_fetch_array($results, MYSQL_NUM);
$max = $row[0];
@mysqli_query("INSERT INTO `LOCAL` SELECT * FROM `id` FROM `REMOTE` WHERE `id` > $max");

SELECT MAX和INSERT WHERE`id`> $ max在0.0003 - 0.0005秒之间,(插入1行。查询耗时0.0003 - 0.0005秒)

在运行此例程之前,我会删除本地表中的最后一行。