CÂU HỎI KHÔNG LUÔN CHẠY TRONG PARALLEL
Nó phụ thuộc vào công cụ cơ sở dữ liệu. Với MyISAM, gần như mọi truy vấn có được một khóa cấp bảng có nghĩa là các truy vấn được chạy tuần tự như một hàng đợi. Với hầu hết các công cụ khác, chúng có thể chạy song song.
echo_me cho biết nothing happens at the exact same time and a CPU does not do everything at once
Điều đó không hoàn toàn đúng. Có thể một DBMS có thể chạy trên một máy có nhiều cpu và với nhiều giao diện mạng. Nó rất không thể chắc chắn rằng 2 truy vấn có thể đến cùng một lúc - nhưng không phải là không thể, do đó, có một mutex để đảm bảo rằng quá trình phân tích cú pháp / thực thi chỉ chạy như một luồng duy nhất (thực thi - không nhất thiết phải là quá trình trọng lượng nhẹ).
Có 2 cách tiếp cận để giải quyết DML đồng nhất - hoặc sử dụng các giao dịch (trong đó mỗi người dùng nhận được một bản sao của cơ sở dữ liệu một cách hiệu quả) và khi các truy vấn đã hoàn thành, DBMS sẽ cố gắng điều chỉnh bất kỳ thay đổi nào - nếu điều chỉnh không thành công, thì DBMS sẽ khôi phục một trong các các truy vấn và báo cáo là không thành công. Cách tiếp cận khác là sử dụng khóa cấp độ hàng - DBMS xác định các hàng sẽ được cập nhật bởi một truy vấn và đánh dấu chúng là dành riêng cho cập nhật (những người dùng khác có thể đọc phiên bản gốc của mỗi hàng nhưng bất kỳ nỗ lực nào để cập nhật dữ liệu sẽ được bị chặn cho đến khi hàng có sẵn trở lại).
Vấn đề của bạn là bạn có hai ứng dụng khách mysql, mỗi khách hàng đã truy xuất thực tế là còn một mặt hàng trong kho. Điều này còn phức tạp hơn bởi thực tế là (vì bạn đề cập đến PHP) các mức cổ phiếu có thể đã được truy xuất trong một phiên DBMS khác với lần điều chỉnh cổ phiếu tiếp theo - bạn không thể có giao dịch kéo dài hơn yêu cầu HTTP. Do đó, bạn cần xác thực lại mọi thông tin được duy trì bên ngoài DBMS trong một giao dịch duy nhất.
Khóa lạc quan có thể tạo ra một cơ chế kiểm soát giao dịch giả - bạn gắn cờ một bản ghi mà bạn sắp sửa đổi bằng dấu thời gian và mã định danh người dùng (với PHP, ID phiên PHP là một lựa chọn tốt) - nếu khi bạn đến sửa đổi nó, hãy làm gì khác đã thay đổi nó, sau đó mã của bạn biết dữ liệu mà nó đã truy xuất trước đó là không hợp lệ. Tuy nhiên, điều này có thể dẫn đến các biến chứng khác.