Насколько мне известно, если мы начнем транзакцию (begin tran
/ commit tran
), она будет полностью выполнена или ничего. Но когда я выполняю код ниже T SQL, первый оператор insert
работает, а второй - нет.
Фон: таблица A имеет два столбца (первичный ключ ID, имя varchar), и он уже имел 3 строки данных (ID 1,2,3).
begin tran
insert into A values (4, 'Tim') -- this works
insert into A values (2, 'Tom') -- this doesn't work because it violates the PK constraint
commit tran
select * from A
Вот мой вопрос: поскольку второй оператор insert
нарушает ограничение PK и не может быть зафиксирован, я думал, что все внутри этой транзакции должно быть отменено, потому что транзакция должна быть успех или неудача как одно целое. Но на самом деле «Тим» добавлен в «А», а «Том» - нет. Нарушает ли это автоматичность транзакции?