- Không.
- Tính tuần tự chỉ bảo đảm thứ tự các top-level field, chứ không phải tính nguyên tử.
- Nếu mutation thứ hai lỗi, mutation thứ nhất đã áp dụng và không được hoàn tác.
graphql
mutation {
a: charge(orderId: "1") { ok }
b: ship(orderId: "1") { ok }
}
# b starts only after a finishes — but if b fails, a is NOT rolled backMuốn tất cả hoặc không gì cả thì phải mở transaction ở business logic. Pattern tốt hơn là gộp thành một mutation duy nhất mô tả đúng ý định nghiệp vụ, thay vì để client gửi ba mutation trong một document rồi hy vọng chúng cùng thành công.
Một chi tiết về phần đọc: các field trong kiểu trả về của mutation được giải quyết như truy vấn thường nên đọc dữ liệu ngay sau khi ghi. Với database có bản sao đọc, dữ liệu vừa ghi có thể chưa lan tới bản sao — đây là nguồn của lỗi đọc ra dữ liệu cũ ngay sau khi cập nhật.