Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
Tài kèo bóng đá c1 này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

3.4. Giao kèo bóng đá c1

Giao kèo bóng đá c1là một khái niệm cơ bản của tất cả các hệ thống cơ sở dữ liệu. Điểm thiết yếu của một giao kèo bóng đá c1 là nó kết hợp nhiều bước vào một hoạt động duy nhất, không có gì.

Ví dụ, hãy xem xét cơ sở dữ kèo bóng đá c1 ngân hàng chứa số dư cho các tài khoản khách hàng khác nhau, cũng như tổng số dư tiền gửi cho các chi nhánh. Giả sử rằng chúng tôi muốn ghi lại khoản thanh toán 100 đô la từ tài khoản của Alice vào tài khoản của Bob.

Cập nhật kèo bóng đá c1 khoản đặt số dư = cân bằng - 100.00

Chi tiết của các lệnh này không quan trọng ở đây; Điểm quan trọng là có một số cập nhật riêng biệt liên quan để thực hiện hoạt động khá đơn giản này.Giao kèo bóng đá c1cung cấp cho chúng tôi sự đảm bảo này. Một giao kèo bóng đá c1 được cho làAtomic: Từ quan điểm của các giao kèo bóng đá c1 khác, nó xảy ra hoàn toàn hoặc hoàn toàn không.

Chúng tôi cũng muốn đảm bảo rằng một khi một giao kèo bóng đá c1 được hoàn thành và được hệ thống cơ sở dữ liệu thừa nhận, nó thực sự đã được ghi lại vĩnh viễn và sẽ không bị mất ngay cả khi một vụ tai nạn xảy ra ngay sau đó. Ví dụ, nếu chúng tôi đang ghi lại việc rút tiền mặt của Bob, chúng tôi không muốn có bất kỳ cơ hội ghi nợ nào vào tài khoản của anh ấy sẽ biến mất trong một vụ tai nạn ngay sau khi anh ấy bước ra khỏi cửa ngân hàng.

Một thuộc tính quan trọng khác của cơ sở dữ liệu giao kèo bóng đá c1 có liên quan chặt chẽ đến khái niệm cập nhật nguyên tử: Khi nhiều giao kèo bóng đá c1 đang chạy đồng thời, mỗi giao kèo bóng đá c1 không thể thấy những thay đổi chưa hoàn chỉnh được thực hiện bởi người khác. Ví dụ: nếu một giao kèo bóng đá c1 bận rộn tổng số số dư chi nhánh, thì nó sẽ không bao gồm việc ghi nợ từ chi nhánh của Alice nhưng không phải là khoản tín dụng cho chi nhánh của Bob, cũng không ngược lại.

inPostgreSQL, một giao kèo bóng đá c1 được thiết lập bằng cách xung quanh các lệnh SQL của giao kèo bóng đá c1 vớiBắt đầucam kếtlệnh. Vì vậy, giao kèo bóng đá c1 ngân hàng của chúng tôi thực sự trông giống như:

bắt đầu;

Nếu, qua giao kèo bóng đá c1, chúng tôi quyết định chúng tôi không muốn cam kết (có lẽ chúng tôi chỉ nhận thấy rằng sự cân bằng của Alice đã âm âm), chúng tôi có thể phát hành lệnhrollbackthay vìcam kếtvà tất cả các bản cập nhật của chúng tôi cho đến nay sẽ bị hủy.

PostgreSQLThực tế đối xử với mọi câu lệnh SQL như được thực thi trong một giao kèo bóng đá c1. Nếu bạn không phát hànhbắt đầulệnh, sau đó mỗi câu lệnh riêng lẻ có một ẩn úybắt đầuvà (nếu thành công)cam kếtBao quanh nó. Một nhóm các câu lệnh được bao quanh bởibắt đầucam kếtđôi khi được gọi làKhối giao kèo bóng đá c1.

Lưu ý

Một số thư viện máy khách phát hànhBắt đầucam kếtCác lệnh tự động, để bạn có thể nhận được hiệu ứng của các khối giao kèo bóng đá c1 mà không cần hỏi. Kiểm tra tài liệu cho giao diện bạn đang sử dụng.

Có thể kiểm soát các câu lệnh trong một giao kèo bóng đá c1 theo kiểu hạt hơn thông qua việc sử dụngSavePoints. SavePoints cho phép bạn loại bỏ có chọn lọc các phần của giao kèo bóng đá c1, trong khi thực hiện phần còn lại.SavePoint, bạn có thể nếu cần quay trở lại điểm lưu vớirollback to. Tất cả các thay đổi cơ sở dữ liệu của giao kèo bóng đá c1 giữa việc xác định điểm lưu và quay lại với nó đều bị loại bỏ, nhưng các thay đổi sớm hơn so với điểm lưu được giữ.

Sau khi quay trở lại điểm lưu, nó tiếp tục được xác định, vì vậy bạn có thể quay lại nó nhiều lần. Ngược lại, nếu bạn chắc chắn rằng bạn sẽ không cần quay trở lại một điểm lưu cụ thể một lần nữa, nó có thể được phát hành, vì vậy hệ thống có thể giải phóng một số kèo bóng đá c1 nguyên.

Tất cả những điều này đang xảy ra trong khối giao kèo bóng đá c1, vì vậy không có phiên nào có thể nhìn thấy cho các phiên cơ sở dữ liệu khác. Khi nào và nếu bạn cam kết khối giao kèo bóng đá c1, các hành động đã cam kết sẽ được hiển thị như một đơn vị cho các phiên khác, trong khi các hành động cuộn trở lại không bao giờ được hiển thị.

Ghi nhớ cơ sở dữ kèo bóng đá c1 ngân hàng, giả sử chúng tôi ghi nợ 100,00 đô la từ tài khoản của Alice và tài khoản của tín dụng Bob, chỉ để tìm thấy sau này chúng tôi nên ghi có tài khoản của Wally. Chúng ta có thể làm điều đó bằng cách sử dụng các điểm lưu như thế này:

Bắt đầu;

Ví dụ này, tất nhiên, quá đơn giản, nhưng có rất nhiều quyền kiểm soát có thể trong một khối giao kèo bóng đá c1 thông qua việc sử dụng các điểm lưu. Hơn thế nữa,rollback tolà cách duy nhất để lấy lại quyền kiểm soát một khối giao kèo bóng đá c1 đã bị bệnh bị hủy bỏ bởi hệ thống do lỗi, thiếu hoàn toàn và bắt đầu lại.