当前位置:  开发笔记 > 编程语言 > 正文

MySQL插入:先测试?

如何解决《MySQL插入:先测试?》经验,为你挑选了2个好方法。

例如,在将记录插入具有唯一索引的表中时,最好先测试吗?例如,

$mysqli->query('SELECT email FROM tblUser WHERE email = 'foo@bar.org');

然后确保返回0行,然后插入?

$mysqli->query('INSERT INTO tblUser ...');

或者,如果有重复的条目,最好是跳过测试并处理错误?

谢谢!



1> Bill Karwin..:

最好插入和处理任何重复的键错误.

原因是如果您先测试,其他一些客户端仍然可以在测试和插入之间的短暂时刻插入值.所以你无论如何都需要处理错误.



2> Ben Blank..:

从广义上讲,有三种方法可以通过单个查询处理这种情况(较少的查询通常是一个好东西可以拍摄),但它们都不是通用的"最佳方式".您应该使用哪种方法取决于您的需求.

首先,正如你所提到的,INSERT …盲目地运行并处理PHP的任何错误.当重复键指示程序问题(软件中的错误,用户尝试注册已使用的名称等等)时,这是最好的方法,因为它允许您在提交数据库更新之前执行其他操作.

其次,有INSERT IGNORE …语法.我倾向于称这是最不常用的方法,因为如果密钥已经存在,它INSERT完全丢弃你的方法.当一行(或多行)可能已经或可能没有先前添加到表中时,主要有用,但已知数据没有更改.

最后,您可以使用INSERT … ON DUPLICATE KEY UPDATE …声明.这些可能会变得相当冗长,但非常方便,因为它们允许您将数据插入表中,而不必担心是否存在旧数据.如果是,则更新现有行.如果没有,则插入新的.无论哪种方式,您的表格都将提供最新数据.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有