Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
MYSQL唯一VS php选择然后插入。。哪个更快?_Mysql_Unique - Fatal编程技术网

MYSQL唯一VS php选择然后插入。。哪个更快?

MYSQL唯一VS php选择然后插入。。哪个更快?,mysql,unique,Mysql,Unique,如果我想在表中维护一个唯一的字段,那么哪个更快 运行select查询,然后插入查询 或者直接运行一个insert查询,但在表中有一个唯一的字段,如果您想在数据库中维护一个唯一的列,那么就使用数据库机制来维护它。在列上创建唯一索引或唯一约束。使用数据库,而不是反对它 此外,您的第一种方法存在一个主要问题。你正在引入一个竞赛条件。两个进程可以尝试同时插入同一条记录。他们都会查看表中的值,并且都会看到插入是正确的。然后两者都将插入相同的值,创建一个副本 当然,有一些解决方法,通常涉及事务逻辑或锁定表。

如果我想在表中维护一个唯一的字段,那么哪个更快

运行select查询,然后插入查询


或者直接运行一个insert查询,但在表中有一个唯一的字段,如果您想在数据库中维护一个唯一的列,那么就使用数据库机制来维护它。在列上创建唯一索引或唯一约束。使用数据库,而不是反对它

此外,您的第一种方法存在一个主要问题。你正在引入一个竞赛条件。两个进程可以尝试同时插入同一条记录。他们都会查看表中的值,并且都会看到插入是正确的。然后两者都将插入相同的值,创建一个副本

当然,有一些解决方法,通常涉及事务逻辑或锁定表。这两种方法都会带来额外的开销,从而降低性能


只需创建一个唯一的列,不必担心唯一性—数据库会让您担心。

一个查询比两个查询运行得快,您不觉得吗?试试看。我猜单次查询会快得多。此外,将其作为表定义是放置此类域信息的正确方法。如果您有需要包含唯一值的字段,则必须在其上放置唯一索引。否则,它在很长时间内都不会是独一无二的。如果数据库中已经有了这个约束,那么再次使用PHP实现它又有什么意义呢。更不用说,由于并发访问,无论使用何种语言,都无法从外部源强制执行唯一性。PHP将SELECT发送到MySQL。有一个滞后。MySQL执行该任务并返回结果。您可以使用PHP进行一些处理。你再问一遍。同样,也会有少量的延迟。您指示MySQL插入。但此时可能存在具有该值的记录。现在-所有这些与一次插入、一次跳闸、一次错误检查相比。@axiac+1用于并发访问。检查然后插入迟早会出错。