Sua afirmação está boa como está. O único problema é que você não pode usá-lo como uma consulta normal. Estruturas de controle como
IF
ou WHILE
são permitidos apenas em procedimentos armazenados ou funções. Basta criar um procedimento assim:
delimiter $$
create procedure select_or_insert()
begin
IF EXISTS (select * from users where username = 'something') THEN
select id from users where username = 'something';
ELSE
insert into users (username) values ('something');
END IF;
end $$
e chame assim:
call select_or_insert();
É isso.