What is the best method to atomically update a row if exists, else insert a new row into an table?
e.g. say we have this example below.
CREATE TABLE Test(
id integer,
val varchar(255)
)
DELIMITER $$
DROP PROCEDURE IF EXISTS `TestUpsert` $$
CREATE PROCEDURE `TestUpsert` (in value1 varchar(255), in id1 int)
BEGIN
    IF EXISTS(Select 1 from Test where id=id1) THEN
        UPDATE Test set val  = value1 where id = id1;
    ELSE
        insert into Test(id, val) VALUES (id1, value1);
    END IF;
END $$
DELIMITER ;
What changes can we make to TestUpsert to make it atomic?
 
     
     
    