Você não precisa excluir todas as linhas para começar.
Você pode excluir apenas as linhas que não se aplicam mais e inserir apenas as linhas novas. Ou você pode atualizar um valor que não se aplica mais com um valor que se aplica.
Então, para sair disso
Name Role
--
John Admin
John Member
John Superuser
para isso
Name Role
--
John Member
John Junior
Você pode excluir o que não se aplica mais. . .
delete from userinroles
where Name = 'John'
and (Role = 'Admin' or Role = 'Superuser');
e insira o que se aplica.
insert into userinroles (Name, Role)
values ('John', 'Junior');
Ou você pode atualizar um valor com um novo valor.
delete from userinroles
where Name = 'John'
and Role = 'Admin';
Seguido por
update userinroles
set Role = 'Junior'
where 'Name' = 'John' and Role = 'Superuser';
Você disse
É para isso que servem as transações. Múltiplas instruções dentro de uma única transação SQL são tudo ou nada - ou todas são bem-sucedidas ou nenhuma alteração é feita.