mysql插入如果行不存在于没有唯一字段的表中
现在已经在寻找如何实现这一目标一段时间了。
似乎所有解决方案都需要带有索引的唯一字段。
Looking for a while now already for how to accomplish this.
Seems that all solutions need unique fields with indexes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
INSERT 中没有 IF NOT EXISTS 语法,但您可以使用
ON DUPLICATE KEY 机制。假设您创建了唯一索引
名字,姓氏,您的更新可能会显示:
这使得插入中性。
there is no IF NOT EXISTS syntax in INSERT, but you could make use of the
ON DUPLICATE KEY mechanism. Assuming you create a unique index on
firstname, lastname, your update might read:
which renders the insert neutral.
您是否已经考虑过 mysql 的 INSERT OR UPDATE 语法,或者您是否希望“取消”最新的插入而不是恢复为更新?
编辑:反射后,
ON DUPLICATE KEY
的确切语法(如 afftee 所示)仅由主键或至少唯一列上的重复值触发。一个可能的解决方案是使用类似于此的
BEFORE INSERT
触发器:如果您想停止触发器并阻止实际插入,似乎您可以使用 Nicolas Lescure 在 [mysql 上找到的这篇文章文档][1]:
[1]: http://dev.mysql.com/ doc/refman/5.1/en/create-trigger.html mysql 创建触发器文档
Have you already considered the
INSERT OR UPDATE
syntax of mysql, or do you want the newest insertion to be 'cancelled' instead of reverting to an update ?Edit: after reflexion, the exact syntax, as shown by afftee, of
ON DUPLICATE KEY
is only triggered by duplicate value on primary key or at least unique columns.A possible solution would be to use a
BEFORE INSERT
trigger similar to this :If you want to stop the trigger and prevent the actual insert, it seems like you can use this post from Nicolas Lescure found on [mysql doc][1] :
[1]: http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html mysql create trigger documentation