BeginTransaction không có nghĩa là "giao dịch của bạn đã bắt đầu và mọi thứ đều bị khóa". Nó chỉ thông báo cho RDBMS về ý định bắt đầu giao dịch của bạn và rằng mọi thứ bạn nên làm từ bây giờ trở đi nên và phải được coi là nguyên tử.
Điều này có nghĩa là bạn có thể gọi BeingTransaction và tôi có thể xóa tất cả dữ liệu khỏi tất cả các bảng trong cơ sở dữ liệu của bạn và RDBMS sẽ vui vẻ cho phép tôi làm điều đó. Hy vọng rằng nó không nên để tôi đánh rơi DB vì bạn có một kết nối mở với nó, tuy nhiên, bạn không bao giờ biết những ngày này. Có thể có một số tính năng không có giấy tờ mà tôi không biết.
Nguyên tử có nghĩa là bất kỳ hành động hoặc tập hợp các hành động phải được thực hiện như một. Nếu bất kỳ một trong số họ không thành công thì tất cả chúng đều thất bại. Nó là một khái niệm tất cả hoặc không có gì.
Có vẻ như bạn đang chèn ba hàng vào một bảng. Nếu bảng của bạn trống hoặc có số hàng rất thấp, nó có thể khóa toàn bộ bảng tùy thuộc vào quy tắc KHÓA KÉO DÀI của RDBMS của bạn. Tuy nhiên, nếu đó là một bảng lớn hoặc rất lớn hoặc được phân vùng thì quy tắc leo thang của LOCK có thể không đảm bảo khóa bảng. Vì vậy, vẫn có thể có nhiều giao dịch chèn các hàng vào bảng của bạn cùng một lúc. Tất cả phụ thuộc vào cách RDBMS xử lý tình huống này và cách mô hình dữ liệu của bạn được cấu trúc.
Bây giờ để trả lời câu hỏi của bạn:
GỢI Ý - Tìm cách khóa toàn bộ bảng trước khi bạn bắt đầu chèn dữ liệu.
Tuy nhiên, điều này thường không tốt nhưng tôi cho rằng bạn có lý do hợp lý để làm điều đó.
Hy vọng điều này sẽ hữu ích.