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

如果条目不存在则创建,否则更新?

如何解决《如果条目不存在则创建,否则更新?》经验,为你挑选了3个好方法。

有点奇怪,把它写成简短的话,呵呵.

无论如何,我想要的基本上是更新表中的条目(如果它确实存在),否则创建一个用相同数据填充它的新条目.

我知道这很简单,但就我使用它的程度而言,我对MySQL相对较新:P



1> Kennethvr..:

许多开发人员仍然执行查询以检查表中是否存在字段,然后根据第一个查询的结果执行插入或更新查询.尝试使用ON DUPLICATE KEY语法,这比执行2个查询更快更好.更多信息可以在这里找到

INSERT INTO表(a,b,c)VALUES(4,5,6)在DUPLICATE KEY UPDATE c = 9;

如果要为c保留相同的值,可以使用相同的值进行更新

INSERT INTO表(a,b,c)VALUES(4,5,6)在DUPLICATE KEY UPDATE c = 6;

'replace'和'on duplicate key'之间的区别:

替换:插入,删除和插入

在重复键上:插入或更新

如果您的表没有主键或唯一键,则替换没有任何意义.

您还可以使用该VALUES函数来避免必须指定实际值两次.而不是

INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;

您可以使用

INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);

哪里VALUES(c)将评估为主要指定的值(6).


IMO,这个回答更好地回答了这个问题.如果你确实想在行已经存在时进行更新,则REPLACE具有破坏性:"REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行." (MySQL手册)
+1:比接受的答案好得多的答案

2> carl..:

使用'REPLACE INTO':

 REPLACE INTO table SET id = 42, foo = 'bar';

请参阅MySQL文档中的更多内容



3> nickf..:

正如其他人所说,REPLACE是走的路.只是要小心使用它,虽然,因为它实际上做了DELETE,并INSERT在桌子上.这在大多数情况下都很好,但是如果你有带有限制的外键ON DELETE CASCADE,它可能会导致一些大问题.

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