If performing two queries is not a problem you could UPDATE and INSERT separately. First, the UPDATE query:
UPDATE my_table SET field1 =
(CASE id
WHEN 1 THEN 'value1'
WHEN 2 THEN 'value2'
WHEN 3 THEN 'value3'
END),
field2 =
(CASE id
WHEN 1 THEN 'value4'
WHEN 2 THEN 'value5'
WHEN 3 THEN 'value6'
END)
WHERE id IN(1,2,3)
On the insert side
INSERT INTO my_table(id, field1, field2) VALUES
(NULL, 'value7', 'value8'),
(NULL, 'value9', 'value10'),
(NULL, 'value11', 'value12')
;
That would result in something like:
id | field1 | field 2
-----------------------
1 | value1 | value4
2 | value2 | value5
3 | value3 | value6
4 | value7 | value8
5 | value9 | value10
6 | value11 | value12
TEST IT YOURSELF
You could try yourself this by creating the schema
CREATE TABLE `my_db`.`my_table` (
`id` INT NOT NULL AUTO_INCREMENT,
`field1` VARCHAR(45) NULL,
`field2` VARCHAR(45) NULL,
PRIMARY KEY (`id`)
);
And some initial data so you can check the updates
INSERT INTO `my_db`.`my_table` (`field1`, `field2`) VALUES ('value', 'anotherValue');
INSERT INTO `my_db`.`my_table` (`field1`, `field2`) VALUES ('moreValue', 'justAnother');
INSERT INTO `my_db`.`my_table` (`field1`, `field2`) VALUES ('moreAndMore', 'valuesEverywhere');
Then just perform the queries to see with your own eyes.
Hope it helps!