No es necesario que elimine todas las filas para comenzar.
Puede eliminar solo las filas que ya no se aplican e insertar solo las filas que son nuevas. O puede actualizar un valor que ya no se aplica con un valor que sí se aplica.
Así que para salir de esto
Name Role
--
John Admin
John Member
John Superuser
a esto
Name Role
--
John Member
John Junior
Puede eliminar lo que ya no se aplica. . .
delete from userinroles
where Name = 'John'
and (Role = 'Admin' or Role = 'Superuser');
e inserte lo que corresponda.
insert into userinroles (Name, Role)
values ('John', 'Junior');
O puede actualizar un valor con un nuevo valor.
delete from userinroles
where Name = 'John'
and Role = 'Admin';
Seguido por
update userinroles
set Role = 'Junior'
where 'Name' = 'John' and Role = 'Superuser';
Tú dijiste
Para eso están las transacciones. Múltiples declaraciones dentro de una sola transacción SQL son todo o nada, o todas tienen éxito o no se realizan cambios.