是否可以插入一行,但仅当表中已有的值之一不存在时?
我创建一个告诉朋友转诊点的电子商务系统,在这里我需要插入朋友的电子邮件到数据库表中,但只有当它不存在于表中.这是因为一旦新客户注册并购买了东西,我不希望任何超过1人获得推荐积分.因此,我只想在表格中输入一次电子邮件.
我正在使用PHP 4和MySql 4.1.
如果列上有唯一索引或主键(本例中为EmailAddr),则此方法有效:
INSERT IGNORE INTO Table (EmailAddr) VALUES ('test@test.com')
如果具有该电子邮件的记录已存在(重复密钥冲突)而不是错误,则使用此语句,该语句将失败并且不会插入任何内容.
有关更多信息,请参阅MySql文档.
如果列是主键或唯一索引:
INSERT INTO table (email) VALUES (email_address) ON DUPLICATE KEY UPDATE email=email_address
知道我的运气有一个更好的方法来做到这一点.AFAIK在MySQL中没有相应的"ON DUPLICATE KEY DO NOTHING".我不确定email = email_Address位,你可以玩,看看它是否有效,你不必指定一个动作.正如有人说的那样,如果它有独特的限制,那么无论如何都不会发生.如果您希望表中的所有电子邮件地址都是唯一的,则没有理由在列定义中将其指定为唯一.
最有可能的是:
IF NOT EXISTS(SELECT * FROM myTable WHERE Email=@Email) THEN INSERT INTO blah blah
这可以归结为一个数据库查询.