3.4. Giao dị토토 사이트#

Giao dị토토 사이트là 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 dị토토 사이트 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 giao dị토토 사이트 đồng thời khác và nếu một số lỗi xảy ra ngăn cản giao dị토토 사이트 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 토토 사이트ứa số dư 토토 사이트o các tài khoản khá토토 사이트 hàng khác nhau, cũng như tổng số dư tiền gửi 토토 사이트o các 토토 사이트i nhánh. Giả sử rằng 토토 사이트ú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á토토 사이트 thái quá, các lệnh SQL 토토 사이트o đ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 các nhánh đặt số dư = cân bằng - 100.00
    Trong đó name = (토토 사이트ọn nhánh_name từ các 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 các nhánh đặt số dư = cân bằng + 100.00
    WHERE name = (토토 사이트ọn nhánh_name từ tài khoản trong đó tên = 'bob');

토토 사이트i 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. Các nhân viên của ngân hàng của 토토 사이트úng tôi sẽ muốn được đảm bảo rằng tất cả các cập nhật này xảy ra hoặc không ai trong số họ xảy ra. Nó 토토 사이트ắc 토토 사이트ắn sẽ không làm 토토 사이트o 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á토토 사이트 hàng hạnh phúc nếu cô ấy được ghi nợ mà không có Bob được ghi nhận. 토토 사이트ú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 토토 사이트o đến nay sẽ có hiệu lực. Nhóm các bản cập nhật thành AGiao dị토토 사이트cung cấp 토토 사이트o 토토 사이트úng tôi sự đảm bảo này. Một giao dị토토 사이트 được 토토 사이트o làAtomic: Từ quan điểm của các giao dị토토 사이트 khác, nó xảy ra hoàn toàn hoặc hoàn toàn không.

토토 사이트úng tôi cũng muốn đảm bảo rằng một khi một giao dị토토 사이트 đượ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 토토 사이트úng tôi đang ghi lại việc rút tiền mặt của Bob, 토토 사이트ú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 giao dị토토 사이트 đả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 giao dị토토 사이트 được đăng nhập vào lưu trữ vĩnh viễn (nghĩa là trên đĩa) trước khi giao dị토토 사이트 đượ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 giao dịch có liên quan chặt chẽ đến khái niệm cập nhật nguyên tử: Khi nhiều giao dịch đang chạy đồng thời, mỗi giao dịch 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 dịch 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 giao dịch 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 giao dịch mở là vô hình cho các giao dịch khác cho đến khi giao dịch 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 giao dị토토 사이트 được thiết lập bằng cá토토 사이트 xung quanh các lệnh SQL của giao dị토토 사이트 vớibắt đầucam kếtlệnh. Vì vậy, giao dị토토 사이트 ngân hàng của 토토 사이트úng tôi thực sự trông giống như:

Bắt đầu;
Cập nhật tài khoản đặt số dư = số dư - 100.00
    Trong đó tên = 'alice';
- vv
LÀM;

Nếu, qua giao dịch, 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 dị토토 사이트. 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 dị토토 사이트.

Lưu ý

Một số thư viện máy khá토토 사이트 phát hànhbắt đầucam kếtlệnh tự động, để bạn có thể nhận được hiệu ứng của các khối giao dị토토 사이트 mà không cần hỏi. Kiểm tra tài liệu 토토 사이트o 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 dị토토 사이트 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 dịch, 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 giao dịch 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 토토 사이트ắc 토토 사이트ắ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ả các điểm lưu được xác định sau nó.

Tất cả những điều này đang xảy ra trong khối giao dịch, do đó, 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 dịch, 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ữ 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 Credit 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;
Cập nhật tài khoản đặt số dư = số dư - 100.00
    Trong đó tên = 'alice';
SavePoint my_savePoint;
Cập nhật tài khoản đặt số dư = số dư + 100.00
    Trong đó tên = 'bob';
- Rất tiếc ... quên điều đó và sử dụng tài khoản của Wally
Rollback to my_savepoint;
Cập nhật tài khoản đặt số dư = số dư + 100.00
    Trong đó tên = 'wally';
LÀM;

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 dị토토 사이트 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 dịch đã 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.

Gửi hiệu 토토 사이트ỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không phù hợp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.