.1. Es erfordert eine Sperre für den vorhandenen Eintrag, damit nachfolgende Versuche, einen doppelten Datensatz einzufügen, konsistent fehlschlagen:
-- Transaction A
BEGIN TRANSACTION;
INSERT INTO mytable VALUE(1); -- fails as "duplicate"
-- Transaction B
BEGIN;
DELETE FROM mytable WHERE field = 1; -- must be put on hold, see below
-- Transaction A
-- transaction is still in progress
INSERT INTO mytable VALUE(1); -- must fail to stay consistent with the previous attempt
.2. Ja, und ja :