有点奇怪,把它写成简短的话,呵呵.
无论如何,我想要的基本上是更新表中的条目(如果它确实存在),否则创建一个用相同数据填充它的新条目.
我知道这很简单,但就我使用它的程度而言,我对MySQL相对较新:P
许多开发人员仍然执行查询以检查表中是否存在字段,然后根据第一个查询的结果执行插入或更新查询.尝试使用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).
使用'REPLACE INTO':
REPLACE INTO table SET id = 42, foo = 'bar';
请参阅MySQL文档中的更多内容
正如其他人所说,REPLACE
是走的路.只是要小心使用它,虽然,因为它实际上做了DELETE
,并INSERT
在桌子上.这在大多数情况下都很好,但是如果你有带有限制的外键ON DELETE CASCADE
,它可能会导致一些大问题.