PostgreSQL: soi kèo bóng đá truoctran | |||
---|---|---|---|
prev | UP | Chương 58. Định nghĩa giao diện phương thức truy cập chỉ kèo bóng đá c1 | NEXT |
PostgreSQLThực thi các ràng buộc duy nhất SQL bằng cách sử dụngChỉ kèo bóng đá c1 duy nhất, là các chỉ kèo bóng đá c1 không cho phép nhiều kèo bóng đá c1 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ó.)
10474_10868
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 kèo bóng đá c1 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 kèo bóng đá c1 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 bóng đá c1 duy nhất đồng thời, tuy nhiên.)
12211_12812
12818_13507"Live"thực sự có nghĩa là"Bất kỳ tuple nào trong chuỗi nóng của kèo bóng đá c1 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 bóng đá c1 duy nhất).
độc đáo_check_yesCho biết đây là một chỉ kèo bóng đá c1 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 bóng đá c1 nhập chỉ kèo bóng đá c1 của mỗi hàng. Phương thức truy cập phải cho phép các kèo bóng đá c1 trùng lặp vào chỉ kèo bóng đá c1 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 kèo bóng đá c1 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 kèo bóng đá c1 đượ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 kèo bóng đá c1 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 kèo bóng đá c1 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 bóng đá c1 nhập chỉ kèo bóng đá c1 mới trong trường hợp này. kèo bóng đá c1 nhập chỉ kèo bóng đá c1 đã có mặt. Thay vào đó, phương thức truy cập phải kiểm tra xem có kèo bóng đá c1 nhập chỉ kèo bóng đá c1 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 bóng đá c1 tiêu thực sự có một kèo bóng đá c1 nhập hiện có trong chỉ kèo bóng đá c1 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 bóng đá c1. 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.