是否可以插入一行,但前提是表中已有一个值不存在?
我正在为一个电子商务系统创建一个带推荐点的Tell A Friend,在这个系统中,我需要将朋友的电子邮件插入到数据库表中,但前提是它不存在于表中。这是因为我不希望任何超过1人获得推荐积分,一旦新客户签约和购买的东西。因此,我希望只有一个电子邮件在表中一次。
我使用的是PHP4和MySql 4.1。
发布于 2008-11-13 00:47:20
如果列是主键或唯一索引:
INSERT INTO table (email) VALUES (email_address) ON DUPLICATE KEY UPDATE
email=email_address
知道我的运气,还有一种更好的方法。AFAIK在MySQL中没有“复制密钥时什么都不做”的等价物。我不确定email=email_Address位,你可以尝试一下,看看它是否工作,而不需要指定一个动作。正如上面有人说的那样,如果它对它有独特的约束,那么无论如何都不会发生任何事情。如果您希望表中的所有电子邮件地址都是唯一的,那么就没有理由在列定义中将其指定为唯一的。
发布于 2008-11-13 00:58:59
如果列上有唯一索引或主键(本例中为EmailAddr),则此方法有效:
INSERT IGNORE INTO Table (EmailAddr) VALUES ('test@test.com')
如果带有该电子邮件的记录已经存在(重复的键冲突)而不是错误,则使用此方法,语句将失败,并且不会插入任何内容。
有关详细信息,请参阅MySql docs。
发布于 2008-11-13 00:52:23
最有可能的情况是:
IF NOT EXISTS(SELECT * FROM myTable WHERE Email=@Email) THEN INSERT INTO blah blah
可以合并到一个数据库查询中。
https://stackoverflow.com/questions/285937
复制相似问题