Como executar um UPSERT para que eu possa usar valores novos e antigos na parte de atualização

Exemplo estúpido, mas simples: suponha que eu tenha uma tabela 'Item' onde guardo os totais dos itens que recebe

Item_Name              Items_In_Stock

O nome do item é a chave primária aqui. Como obter o seguinte sempre que receber o item A na quantidade X.

Se o item não existir, insiro um novo registro para o Item A e defino os itens em estoque como X e, se houver um registro em que os itens em estoque sejam Y, o novo valor em itens em estoque será (X + Y)

INSERT INTO `item`
(`item_name`, items_in_stock)
VALUES( 'A', 27)
ON DUPLICATE KEY UPDATE
`new_items_count` = 27 + (SELECT items_in_stock where item_name = 'A' )

Meu problema é que tenho várias colunas na minha tabela real. É uma boa ideia escrever várias instruções de seleção na parte de atualização?

Claro que posso fazer isso em código, mas existe uma maneira melhor?

questionAnswers(5)

yourAnswerToTheQuestion