Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数据库中添加条目的最快方法(如果不存在)_Php_Mysql_Sql - Fatal编程技术网

Php 在数据库中添加条目的最快方法(如果不存在)

Php 在数据库中添加条目的最快方法(如果不存在),php,mysql,sql,Php,Mysql,Sql,我想向MySQL DB表添加一组条目。如果条目不存在,我需要添加它,否则会向外部发送一些信号,表明它没有被添加(f.e.return false) 我可以检查条目是否存在(使用一个查询),如果不存在,则添加另一个条目。然而,由于可能需要添加数千个条目,我认为额外的查询是不好的 我是否可以只使用一个MySQL查询,如果它不存在,则添加条目;如果它存在,则返回false?您可以使用WHERE NOT exist语法: INSERT INTO table (name, address, tele) V

我想向MySQL DB表添加一组条目。如果条目不存在,我需要添加它,否则会向外部发送一些信号,表明它没有被添加(f.e.return false)

我可以检查条目是否存在(使用一个查询),如果不存在,则添加另一个条目。然而,由于可能需要添加数千个条目,我认为额外的查询是不好的


我是否可以只使用一个MySQL查询,如果它不存在,则添加条目;如果它存在,则返回false?

您可以使用WHERE NOT exist语法:

INSERT INTO table (name, address, tele)
VALUES ('John', 'Somewhere', '001')
WHERE NOT EXISTS (
    SELECT name FROM table WHERE name='value'
);

要使用带insert的WHERE NOT/EXIST查询优化查询,可以按如下方式执行:

INSERT INTO table (name, address, tele)
VALUES ('John', 'Somewhere', '001')
WHERE NOT EXISTS (
    SELECT 1 FROM table WHERE name='value'
);
可以使用
LIMIT 1
进行进一步优化,如:

INSERT INTO table (name, address, tele)
VALUES ('John', 'Somewhere', '001')
WHERE NOT EXISTS (
    SELECT 1 FROM table WHERE name='value' LIMIT 1
);

注意:
SELECT 1
SELECT[column\u name]更快……

尝试插入重复语法,这对CSV有好处。您多长时间执行一次?在每次插入
之前执行
SELECT
不会太贵,因此,如果这是一次性或罕见的操作,我认为您不会节省太多时间。是的,我正在从CSV文件导入它们,其中可能有1000-10000个条目。真的很感谢你的回答,戴,我忘了我必须先跟踪时间,也许这个问题真的不需要这样的修复,我会尝试使用INSERT IGNORE(尽管它半抑制错误)并检查受影响的行数。如果您是从CSV导入,我也会尝试只加载数据,将文件填充到临时表中,然后从那里进行插入(或者甚至将临时表连接到现有的数据表中,直接获取副本)。