Не е нужно да изтривате всички редове, за да започнете.
Можете да изтриете само редовете, които вече не са приложими, и да вмъкнете само редовете, които са нови. Или можете да актуализирате стойност, която вече не е приложима, със стойност, която е приложима.
И така, за да получите от това
Name Role
--
John Admin
John Member
John Superuser
към това
Name Role
--
John Member
John Junior
Можете да изтриете това, което вече не е приложимо. . .
delete from userinroles
where Name = 'John'
and (Role = 'Admin' or Role = 'Superuser');
и вмъкнете приложимото.
insert into userinroles (Name, Role)
values ('John', 'Junior');
Или можете да актуализирате стойност с нова стойност.
delete from userinroles
where Name = 'John'
and Role = 'Admin';
Последвано от
update userinroles
set Role = 'Junior'
where 'Name' = 'John' and Role = 'Superuser';
Ти каза
За това са транзакциите. Множеството оператори в рамките на една SQL транзакция са всичко или нищо - или всички са успешни, или не се правят промени.