BeginTransaction nie oznacza, że "Twoja transakcja rozpoczęła się i wszystko jest zablokowane". Po prostu informuje RDBMS o zamiarze zainicjowania transakcji i że wszystko, co powinieneś od teraz zrobić, powinno i musi być uważane za niepodzielne.
Oznacza to, że możesz wywołać BeingTransaction, a ja mógłbym usunąć wszystkie dane ze wszystkich tabel w Twojej bazie danych, a RDBMS z radością mi na to pozwoli. Mam nadzieję, że nie powinno mi to pozwolić na porzucenie DB, ponieważ masz z nim otwarte połączenie, jednak w dzisiejszych czasach nigdy nie wiadomo. Mogą istnieć pewne nieudokumentowane funkcje, o których nie wiem.
Atomowe oznacza, że każde działanie lub zestaw działań musi być wykonane jako jedno. Jeśli któryś z nich zawiedzie, to wszystkie zawiodą. Jest to koncepcja wszystko albo nic.
Wygląda na to, że wstawiasz trzy wiersze do tabeli. Jeśli twoja tabela jest pusta lub ma bardzo małą liczbę wierszy, może zablokować całą tabelę w zależności od reguł LOCK ESCALATION twojego RDBMS. Jeśli jednak jest to duża, bardzo duża lub podzielona na partycje tabela, reguły eskalacji LOCK mogą nie gwarantować zablokowania tabeli. Dlatego nadal może być możliwe, aby wiele transakcji wstawiało wiersze do tabeli w tym samym czasie. Wszystko zależy od tego, jak RDBMS poradzi sobie z tą sytuacją i jak skonstruowany jest model danych.
Teraz odpowiem na Twoje pytanie:
WSKAZÓWKA - Poszukaj sposobu na zablokowanie całej tabeli przed rozpoczęciem wstawiania danych.
Jednak zazwyczaj nie jest to dobre, ale zakładam, że masz uzasadniony powód, aby to zrobić.
Mam nadzieję, że to pomoże.