您好我试图通过一个查询找到UPDATE或INSERT数据的方式。
我有一张像这样的表:
+------+-------------+
| User | action_type |
+------+-------------+
| Jon | 1 |
| Kate | 2 |
| Jon | 4 |
+------+-------------+
如果没有Jon的值,我想为Jon插入新值。
如果我有Jon的值,我想用Jon更新所有行。
我读过有关INSERT ... ON DUPLICATE KEY UPDATE但我没有唯一的值。
感谢您的帮助。
答案 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 ;