Tôi hiểu câu hỏi của bạn như "bản thân mỗi truy vấn đó là một phép toán nguyên tử?". Sau đó, câu trả lời là "có". Hai câu trả lời còn lại là đúng, khi chúng nói rằng tất cả các phát biểu của bạn cùng nhau không phải là nguyên tử.
Tính nguyên tử trong cơ sở dữ liệu chỉ có nghĩa là tất cả hoặc không có gì. Nó không có nghĩa là tính đúng đắn của dữ liệu. Tuyên bố của bạn có thành công hay không. Nó không liên quan gì đến các phép nối hoặc truy vấn con. Một câu lệnh là một câu lệnh, bất kể cơ sở dữ liệu của bạn có phải sử dụng một bảng tạm thời trong bộ nhớ hoặc trên đĩa hay không.
Các giao dịch chỉ yêu cầu cơ sở dữ liệu của bạn coi nhiều câu lệnh như một câu lệnh. Khi một trong các câu lệnh bị lỗi, tất cả các câu lệnh đó sẽ được khôi phục.
Một chủ đề quan trọng có liên quan ở đây là mức cách ly . Bạn có thể muốn đọc về những điều đó.
CHỈNH SỬA (để trả lời nhận xét):
Đúng rồi. Miễn là nó là một câu lệnh hợp lệ và không xảy ra mất điện hoặc các lý do khác khiến truy vấn có thể không thành công, thì nó đã được thực hiện. Tính nguyên tử tự nó chỉ đảm bảo rằng (các) câu lệnh có được / đang được thực hiện hay không. Nó đảm bảo tính đầy đủ và dữ liệu không bị hỏng (gây ra hoạt động ghi không hoàn thành hoặc một cái gì đó). Nó không đảm bảo cho bạn tính chính xác của dữ liệu. Đưa ra một truy vấn như INSERT INTO foo SELECT MAX(id) + 1 FROM bar;
bạn phải đảm bảo bằng cách đặt đúng mức cách ly , mà bạn không nhận được các lần đọc ảo hoặc bất cứ thứ gì.