PostgreSQL: kèo chấp bóng đá | |||
---|---|---|---|
prev | UP | Chương 55. Định nghĩa giao diện phương thức truy cập chỉ kèo tỷ số bóng đá euro hôm nay | NEXT |
PostgreSQLThực thi các ràng buộc duy nhất SQL bằng cách sử dụngChỉ kèo tỷ số bóng đá euro hôm nay duy nhất, là các chỉ kèo tỷ số bóng đá euro hôm nay không cho phép nhiều kèo tỷ số bóng đá euro hôm nay với các khóa giống hệt nhau. Phương thức truy cập hỗ trợ các bộ tính năng nàypg_am.AmcanuniqueĐúng. (Hiện tại, chỉ có B-Tree hỗ trợ nó.)
Do MVCC, luôn luôn cần phải cho phép các kèo tỷ số bóng đá euro hôm nay trùng lặp tồn tại về mặt vật lý trong một chỉ kèo tỷ số bóng đá euro hôm nay: các kèo tỷ số bóng đá euro hôm nay có thể đề cập đến các phiên bản liên tiếp của một hàng logic duy nhất. Hành vi mà chúng tôi thực sự muốn thực thi là không có ảnh chụp nhanh MVCC nào có thể bao gồm hai hàng có khóa chỉ kèo tỷ số bóng đá euro hôm nay bằng nhau. Điều này chia thành các trường hợp sau đây phải được kiểm tra khi chèn một hàng mới vào một chỉ kèo tỷ số bóng đá euro hôm nay duy nhất:
Nếu một hàng hợp lệ mâu thuẫn đã bị xóa bởi giao dịch hiện tại, thì không sao. .
Nếu một hàng mâu thuẫn đã được chèn bởi một giao dịch chưa được cam kết, thì người sẽ phải chờ xem giao dịch đó có cam kết không. Nếu nó quay trở lại thì không có xung đột. Nếu nó cam kết mà không xóa hàng mâu thuẫn một lần nữa, có một vi phạm độc đáo. (Trong thực tế, chúng tôi chỉ chờ giao dịch khác kết thúc và sau đó làm lại kiểm kèo tỷ số bóng đá euro hôm nay khả năng hiển thị trong toto.)
11550_11743
Hơn nữa, ngay trước khi báo cáo vi phạm tính độc đáo Theo các quy tắc trên, phương thức truy cập phải kiểm kèo tỷ số bóng đá euro hôm nay lại khả năng sống của hàng được chèn. Nếu nó được cam kết đã chết thì không có vi phạm nên được báo cáo. .Tạo chỉ kèo tỷ số bóng đá euro hôm nay duy nhất đồng thời, tuy nhiên.)
Chúng tôi yêu cầu phương thức truy cập chỉ kèo tỷ số bóng đá euro hôm nay để áp dụng các thử nghiệm này, điều đó có nghĩa là nó phải tiếp cận với đống để kiểm tra trạng thái cam kết của bất kỳ hàng nào được hiển thị có khóa trùng lặp theo nội dung chỉ kèo tỷ số bóng đá euro hôm nay. Điều này chắc chắn là xấu xí và không mô-đun, nhưng nó tiết kiệm công việc dư thừa: nếu chúng tôi thực hiện một đầu dò riêng thì việc tra cứu chỉ kèo tỷ số bóng đá euro hôm nay cho một hàng mâu thuẫn về cơ bản sẽ được lặp lại trong khi tìm nơi chèn kèo tỷ số bóng đá euro hôm nay chỉ kèo tỷ số bóng đá euro hôm nay mới của hàng. Hơn thế nữa, không có cách nào rõ ràng để tránh các điều kiện chủng tộc trừ khi kiểm tra xung đột là một phần không thể thiếu của việc chèn vào kèo tỷ số bóng đá euro hôm nay nhập chỉ kèo tỷ số bóng đá euro hôm nay mới.
Nếu ràng buộc duy nhất là có thể trì hoãn, có sự phức tạp bổ sung: Chúng ta cần có khả năng chèn một kèo tỷ số bóng đá euro hôm nay nhập chỉ kèo tỷ số bóng đá euro hôm nay cho một hàng mới, nhưng trì hoãn mọi lỗi vi phạm độc đáo cho đến khi kết thúc câu lệnh hoặc thậm chí sau này. Để tránh các tìm kiếm lặp lại không cần thiết của chỉ kèo tỷ số bóng đá euro hôm nay, phương pháp truy cập chỉ kèo tỷ số bóng đá euro hôm nay sẽ thực hiện kiểm tra tính duy nhất sơ bộ trong quá trình chèn ban đầu. Nếu điều này cho thấy rằng chắc chắn không có tuple trực tiếp mâu thuẫn, chúng tôi đã hoàn thành. Mặt khác, chúng tôi lên lịch kiểm tra lại để xảy ra khi đến lúc thực thi các ràng buộc. Nếu, tại thời điểm kiểm tra lại, cả bộ tuple được chèn và một số tuple khác có cùng một khóa đều trực tiếp, thì phải báo cáo lỗi. (Lưu ý rằng với kèo tỷ số bóng đá euro hôm nay đích này,"Live"thực sự có nghĩa là"Bất kỳ tuple nào trong chuỗi nóng của kèo tỷ số bóng đá euro hôm nay nhập chỉ là trực tiếp".) Để thực hiện điều này,Aminsert
Hàm được truyền ACheckuniqueTham số có một trong các giá trị sau:
độc đáo_check_nochỉ ra rằng không nên kiểm tra tính duy nhất (đây không phải là một chỉ kèo tỷ số bóng đá euro hôm nay duy nhất).
độc đáo_check_yesCho biết đây là một chỉ kèo tỷ số bóng đá euro hôm nay duy nhất không thể hủy bỏ và kiểm tra tính duy nhất phải được thực hiện ngay lập tức, như được mô tả ở trên.
độc đáo_check_partialcho biết ràng buộc duy nhất là có thể trì hoãn.PostgreSQLsẽ sử dụng chế độ này để chèn vào kèo tỷ số bóng đá euro hôm nay nhập chỉ kèo tỷ số bóng đá euro hôm nay của mỗi hàng. Phương thức truy cập phải cho phép các kèo tỷ số bóng đá euro hôm nay trùng lặp vào chỉ kèo tỷ số bóng đá euro hôm nay và báo cáo bất kỳ bản sao tiềm năng nào bằng cách trả về false từAminsert
. Đối với mỗi hàng giả được trả lại, một lần kiểm kèo tỷ số bóng đá euro hôm nay lại sẽ được lên lịch.
Phương thức truy cập phải xác định bất kỳ hàng nào có thể vi phạm ràng buộc duy nhất, nhưng đó không phải là lỗi để báo cáo các dương tính giả. Điều này cho phép kiểm kèo tỷ số bóng đá euro hôm nay được thực hiện mà không cần chờ các giao dịch khác kết thúc; Xung đột được báo cáo ở đây không được coi là lỗi và sẽ được kiểm kèo tỷ số bóng đá euro hôm nay lại sau đó, vào thời điểm đó chúng có thể không còn là xung đột nữa.
độc đáo_check_existingchỉ ra rằng đây là một việc kiểm kèo tỷ số bóng đá euro hôm nay lại một hàng được báo cáo là vi phạm độc đáo tiềm năng. Mặc dù điều này được thực hiện bằng cách gọiAminsert
, Phương thức truy cập phảikhôngChèn một kèo tỷ số bóng đá euro hôm nay nhập chỉ kèo tỷ số bóng đá euro hôm nay mới trong trường hợp này. kèo tỷ số bóng đá euro hôm nay nhập chỉ kèo tỷ số bóng đá euro hôm nay đã có mặt. Thay vào đó, phương thức truy cập phải kiểm tra xem có kèo tỷ số bóng đá euro hôm nay nhập chỉ kèo tỷ số bóng đá euro hôm nay trực tiếp khác không. Nếu vậy, và nếu hàng đích cũng vẫn còn tồn tại, lỗi báo cáo.
khuyến nghị rằng trong Ađộc đáo_check_existingGọi, phương thức truy cập xác minh thêm rằng hàng kèo tỷ số bóng đá euro hôm nay tiêu thực sự có một kèo tỷ số bóng đá euro hôm nay nhập hiện có trong chỉ kèo tỷ số bóng đá euro hôm nay và lỗi báo cáo nếu không. Đây là một ý tưởng tốt bởi vì các giá trị Tuple Index được chuyển choAminsert
sẽ được tính toán lại. Nếu định nghĩa chỉ số liên quan đến các chức năng không thực sự bất biến, chúng ta có thể kiểm tra sai khu vực của chỉ kèo tỷ số bóng đá euro hôm nay. Kiểm tra xem hàng đích được tìm thấy trong phần kiểm tra lại xác minh rằng chúng tôi đang quét các giá trị tuple giống như được sử dụng trong chèn ban đầu.