对没有唯一值的同一查询进行更新或插入

时间:2014-03-05 08:24:55

标签: mysql sql

您好我试图通过一个查询找到UPDATE或INSERT数据的方式。

我有一张像这样的表:

+------+-------------+
| User | action_type |
+------+-------------+
| Jon  | 1           |
| Kate | 2           |
| Jon  | 4           |
+------+-------------+

如果没有Jon的值,我想为Jon插入新值。

如果我有Jon的值,我想用Jon更新所有行。

我读过有关INSERT ... ON DUPLICATE KEY UPDATE但我没有唯一的值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

你可以计算jon的条目。如果存在则更新其他插入。 如果你只想使用sql实现,你可以使用存储过程

类似的东西:

CREATE PROCEDURE insertorupdate (IN name VARCHAR(20))
BEGIN
    DECLARE numJon  INT;
    SELECT COUNT(*) INTO numJon FROM table WHERE User=name;
    IF numJon > 0 THEN
        // UPDATE ;
    ELSE
      // INSERT
    END IF;

END 

然后你可以叫你商店程序:

CALL insertorupdate('John');

如果你可以从你的应用程序中执行此操作,则可以单独调用相同的内容。执行选择计数,如果计数大于0,则测试,然后在DB上执行插入或更新

答案 1 :(得分:0)

不要像user468891的答案那样计算。它可能会成为一个性能问题。而只是检查条目是否存在。一旦找到条目,查询返回true,count继续查找所有记录。

DELIMITER $$
CREATE PROCEDURE insertorupdate (IN name VARCHAR(20))
BEGIN
    IF (EXISTS(SELECT 1 FROM table WHERE User = name)) THEN
        // UPDATE...
    ELSE
        // INSERT...
    END IF;
END $$
DELIMITER ;