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

是否可以插入一行,但仅当某个值尚不存在时?

如何解决《是否可以插入一行,但仅当某个值尚不存在时?》经验,为你挑选了3个好方法。

是否可以插入一行,但仅当表中已有的值之一不存在时?

我创建一个告诉朋友转诊点的电子商务系统,在这里我需要插入朋友的电子邮件到数据库表中,但只有当它不存在于表中.这是因为一旦新客户注册并购买了东西,我不希望任何超过1人获得推荐积分.因此,我只想在表格中输入一次电子邮件.

我正在使用PHP 4和MySql 4.1.



1> Todd..:

如果列上有唯一索引或主键(本例中为EmailAddr),则此方法有效:

INSERT IGNORE INTO Table (EmailAddr) VALUES ('test@test.com')

如果具有该电子邮件的记录已存在(重复密钥冲突)而不是错误,则使用此语句,该语句将失败并且不会插入任何内容.

有关更多信息,请参阅MySql文档.


警惕REPLACE增加你的自动增量 - 在引擎盖下它只是一个DELETE,INSERT.

2> victoriah..:

如果列是主键或唯一索引:

INSERT INTO table (email) VALUES (email_address) ON DUPLICATE KEY UPDATE
email=email_address

知道我的运气有一个更好的方法来做到这一点.AFAIK在MySQL中没有相应的"ON DUPLICATE KEY DO NOTHING".我不确定email = email_Address位,你可以玩,看看它是否有效,你不必指定一个动作.正如有人说的那样,如果它有独特的限制,那么无论如何都不会发生.如果您希望表中的所有电子邮件地址都是唯一的,则没有理由在列定义中将其指定为唯一.



3> 小智..:

最有可能的是:

IF NOT EXISTS(SELECT * FROM myTable WHERE Email=@Email) THEN INSERT INTO blah blah

这可以归结为一个数据库查询.

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