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
soi kèo bóng đá truoctran liệu 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 soi kèo bóng đá truoctran phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

3.4. soi kèo bóng đá truoctran

soi kèo bóng đá truoctranlà 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 soi kèo bóng đá truoctran là nó kết hợp nhiều bước vào một hoạt động duy nhất, không có gì. Các trạng thái trung gian giữa các bước không thể nhìn thấy đối với các soi kèo bóng đá truoctran đồng thời khác và nếu một số lỗi xảy ra ngăn cản soi kèo bóng đá truoctran hoàn thành, thì không có bước nào ảnh hưởng đến cơ sở dữ liệu.

Ví dụ, hãy xem xét cơ sở dữ liệu ngân hàng chứa số dư cho soi kèo bóng đá truoctran tài khoản khách hàng khác nhau, cũng như tổng số dư tiền gửi cho soi kèo bóng đá truoctran 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. Đơn giản hóa một cách thái quá, soi kèo bóng đá truoctran lệnh SQL cho điều này có thể trông giống như:

Cập nhật tài khoản đặt số dư = cân bằng - 100.00
    Trong đó tên = 'alice';
Cập nhật soi kèo bóng đá truoctran nhánh đặt số dư = cân bằng - 100.00
    Trong đó name = (chọn nhánh_name từ soi kèo bóng đá truoctran tài khoản trong đó name = 'alice');
Cập nhật tài khoản đặt số dư = số dư + 100.00
    Trong đó tên = 'bob';
Cập nhật soi kèo bóng đá truoctran nhánh đặt số dư = cân bằng + 100.00
    WHERE name = (chọn nhánh_name từ tài khoản trong đó tên = 'bob');

Chi tiết của soi kèo bóng đá truoctran 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. soi kèo bóng đá truoctran nhân viên của ngân hàng của chúng tôi sẽ muốn được đảm bảo rằng tất cả soi kèo bóng đá truoctran cập nhật này xảy ra hoặc không ai trong số họ xảy ra. Nó chắc chắn sẽ không làm cho một hệ thống thất bại trong việc Bob nhận được 100 đô la mà không được ghi nợ từ Alice. Alice cũng sẽ không phải là một khách hàng hạnh phúc nếu cô ấy được ghi nợ mà không có Bob được ghi nhận. Chúng tôi cần đảm bảo rằng nếu có điều gì đó không ổn trong quá trình hoạt động, không có bước nào được thực hiện cho đến nay sẽ có hiệu lực. Nhóm soi kèo bóng đá truoctran bản cập nhật thành Asoi kèo bóng đá truoctrancung cấp cho chúng tôi sự đảm bảo này. Một soi kèo bóng đá truoctran được cho làAtomic12459_12552

Chúng tôi cũng muốn đảm bảo rằng một khi một soi kèo bóng đá truoctran đượ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. Cơ sở dữ liệu soi kèo bóng đá truoctran đảm bảo rằng tất cả các bản cập nhật được thực hiện bởi một soi kèo bóng đá truoctran được đăng nhập vào lưu trữ vĩnh viễn (nghĩa là trên đĩa) trước khi soi kèo bóng đá truoctran được báo cáo hoàn tất.

Một thuộc tính quan trọng khác của cơ sở dữ liệu soi kèo bóng đá truoctran có liên quan chặt chẽ đến khái niệm cập nhật nguyên tử: Khi nhiều soi kèo bóng đá truoctran đang chạy đồng thời, mỗi soi kèo bóng đá truoctran không thể thấy những thay đổi chưa hoàn chỉnh do người khác thực hiện. Ví dụ: nếu một soi kèo bóng đá truoctran 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. Vì vậy, các soi kèo bóng đá truoctran phải là tất cả hoặc không có gì về mặt ảnh hưởng vĩnh viễn của chúng trên cơ sở dữ liệu, mà còn về khả năng hiển thị của chúng khi chúng xảy ra. Các bản cập nhật được thực hiện cho đến nay bởi một soi kèo bóng đá truoctran mở là vô hình cho các soi kèo bóng đá truoctran khác cho đến khi soi kèo bóng đá truoctran hoàn tất, trong đó tất cả các bản cập nhật trở nên có thể hiển thị đồng thời.

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

Bắt đầu;
Cập nhật soi kèo bóng đá truoctran khoản đặt số dư = số dư - 100.00
    Trong đó tên = 'alice';
- vv
LÀM;

14277_14438rollbackthay vìcam kếtvà tất cả soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran. 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 soi kèo bóng đá truoctran câu lệnh được bao quanh bởibắt đầucam kếtđôi khi được gọi làKhối soi kèo bóng đá truoctran.

Lưu ý:Một số thư viện máy khách phát hànhbắt đầucam kết15225_15379

Có thể kiểm soát các câu lệnh trong một soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran, trong khi thực hiện phần còn lại. Sau khi xác định điểm lưu vớiSavePoint, 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 soi kèo bóng đá truoctran 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ố tài nguyên. Hãy nhớ rằng việc phát hành hoặc quay trở lại điểm lưu sẽ tự động giải phóng tất cả soi kèo bóng đá truoctran điểm lưu được xác định sau nó.

16359_16636

Ghi nhớ cơ sở dữ liệu 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 soi kèo bóng đá truoctran điểm lưu như thế này:

16886_17217

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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran đã 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.