Du behöver inte ta bort alla rader till att börja med.
Du kan bara ta bort de rader som inte längre gäller och bara infoga de rader som är nya. Eller så kan du uppdatera ett värde som inte längre gäller med ett värde som gäller.
Så för att komma från det här
Name Role
--
John Admin
John Member
John Superuser
till detta
Name Role
--
John Member
John Junior
Du kan radera det som inte längre gäller. . .
delete from userinroles
where Name = 'John'
and (Role = 'Admin' or Role = 'Superuser');
och infoga vad som gäller.
insert into userinroles (Name, Role)
values ('John', 'Junior');
Eller så kan du uppdatera ett värde med ett nytt värde.
delete from userinroles
where Name = 'John'
and Role = 'Admin';
Följt av
update userinroles
set Role = 'Junior'
where 'Name' = 'John' and Role = 'Superuser';
Du sa
Det är vad transaktioner är till för. Flera satser inom en enda SQL-transaktion är allt eller inget – antingen lyckas de alla eller så görs inga ändringar.