有点奇怪,把它写成简短的话,嘿。
无论如何,我想要的是基本上更新表中的条目(如果它存在),否则创建一个用相同数据填充它的新条目。
我知道这很容易,但就我使用它的程度而言,我对MySQL相对较新:P
答案 0 :(得分:67)
许多开发人员仍然执行查询以检查表中是否存在字段,然后根据第一个查询的结果执行插入或更新查询。 尝试使用ON DUPLICATE KEY语法,这比执行2个查询更快更好。更多信息可以在here
找到INSERT INTO表(a,b,c)VALUES(4,5,6) ON DUPLICATE KEY UPDATE c = 9;
如果您想为c保留相同的值,则可以使用相同的值进行更新
INSERT INTO表(a,b,c)VALUES(4,5,6) ON 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)。
答案 1 :(得分:23)
答案 2 :(得分:8)
正如其他人所说,REPLACE
是要走的路。但是要小心使用它,因为它实际上在表上有DELETE
和INSERT
。这在大多数情况下都很好,但是如果你的外键有ON DELETE CASCADE
这样的约束,那么它可能会导致一些大问题。
答案 3 :(得分:2)
在MySQL手册中查找REPLACE。
REPLACE与INSERT完全一样, 除非表中有一个旧行 与a的新行具有相同的值 PRIMARY KEY或UNIQUE索引,旧的 在新行之前删除行 插入。请参见第12.2.5节“INSERT 语法”。
REPLACE是MySQL的扩展 SQL标准。它要么插入,要么 删除和插入。对于另一个MySQL 扩展到标准SQL - 那 插入或更新 - 请参阅 Section 12.2.5.3,“INSERT ...... ON DUPLICATE KEY UPDATE语法“。
如果您有以下INSERT查询:
INSERT INTO table (id, field1, field2) VALUES (1, 23, 24)
这是你应该运行的REPLACE查询:
REPLACE INTO table (id, field1, field2) VALUES (1, 23, 24)