Giao dịch cơ sở dữ liệu là gì?


114

Ai đó có thể đưa ra lời giải thích đơn giản (nhưng không đơn giản hơn có thể) về một giao dịch được áp dụng cho máy tính (ngay cả khi sao chép từ Wikipedia) không?

Câu trả lời:


239

Giao dịch là một đơn vị công việc mà bạn muốn coi là "toàn bộ". Nó phải xảy ra toàn bộ hoặc không.

Một ví dụ điển hình là chuyển tiền từ tài khoản ngân hàng này sang tài khoản ngân hàng khác. Để làm điều đó, trước tiên bạn phải rút số tiền từ tài khoản nguồn, sau đó gửi vào tài khoản đích. Hoạt động phải thành công đầy đủ. Nếu bạn dừng lại giữa chừng, tiền sẽ bị mất, và điều đó là rất xấu.

Trong cơ sở dữ liệu hiện đại, các giao dịch cũng thực hiện một số việc khác - như đảm bảo rằng bạn không thể truy cập dữ liệu mà người khác đã viết nửa chừng. Nhưng ý tưởng cơ bản là giống nhau - các giao dịch đều có để đảm bảo rằng bất kể điều gì xảy ra, dữ liệu bạn làm việc sẽ ở trạng thái hợp lý . Họ đảm bảo sẽ KHÔNG xảy ra tình trạng rút tiền từ tài khoản này nhưng lại không được gửi sang tài khoản khác.


Cảm ơn các ví dụ rất đơn giản
Nomadme

giải thích hay!
Yan Myo Aung

81

Giao dịch là một cách thể hiện sự thay đổi trạng thái. Lý tưởng nhất là các giao dịch có bốn thuộc tính, thường được gọi là ACID:

  • Atomic (nếu thay đổi được cam kết, nó xảy ra trong một lần rơi; bạn không bao giờ có thể thấy "một nửa thay đổi")
  • Nhất quán (thay đổi chỉ có thể xảy ra nếu trạng thái mới của hệ thống có hiệu lực; mọi nỗ lực thực hiện một thay đổi không hợp lệ sẽ không thành công, khiến hệ thống ở trạng thái hợp lệ trước đó)
  • Bị cô lập (không ai khác nhìn thấy bất kỳ phần nào của giao dịch cho đến khi nó được cam kết)
  • Lâu dài (sau khi thay đổi đã xảy ra - nếu hệ thống cho biết giao dịch đã được cam kết, khách hàng không cần phải lo lắng về việc hệ thống "xả" để thay đổi "dính")

Xem mục ACID của Wikipedia để biết thêm chi tiết.

Mặc dù điều này thường được áp dụng cho cơ sở dữ liệu, nhưng nó không nhất thiết phải như vậy. (Cụ thể, hãy xem Bộ nhớ Giao dịch Phần mềm .)


46

Đây là một lời giải thích đơn giản. Bạn cần chuyển 100 đô la từ tài khoản A sang tài khoản B. Bạn có thể thực hiện:

accountA -= 100;
accountB += 100;

hoặc là

accountB += 100;
accountA -= 100;

Nếu có vấn đề gì xảy ra giữa thao tác đầu tiên và thao tác thứ hai trong cặp tiền, bạn có vấn đề - 100 đô la đã biến mất hoặc chúng xuất hiện từ hư không.

Giao dịch là một cơ chế cho phép bạn đánh dấu một nhóm hoạt động và thực hiện chúng theo cách mà tất cả chúng đều thực thi (cam kết), hoặc trạng thái hệ thống sẽ như thể chúng chưa bắt đầu thực thi (rollback).

beginTransaction;
accountB += 100;
accountA -= 100;
commitTransaction;

sẽ chuyển 100 đô la hoặc để cả hai tài khoản ở trạng thái ban đầu.


31

"Một loạt các câu lệnh thao tác dữ liệu phải hoàn thành đầy đủ hoặc hoàn toàn không thành công, khiến cơ sở dữ liệu ở trạng thái nhất quán"


2
Không chỉ cơ sở dữ liệu. Chúng ta có thể mở rộng khái niệm này sang các thành phần khác - như dịch vụ xếp hàng hoặc trạng thái của các hệ thống bên ngoài. Vì vậy, "loạt Một báo cáo thao tác dữ liệu đó phải hoặc là hoàn toàn hoàn chỉnh hoặc hoàn toàn thất bại, để lại hệ thống trong một nhà nước thống nhất"
Michał Chaniewski

10

Giao dịch là một chuỗi gồm một hoặc nhiều hoạt động SQL được coi như một đơn vị.

Cụ thể, mỗi giao dịch dường như chạy riêng lẻ, và hơn nữa, nếu hệ thống không thành công, mỗi giao dịch sẽ được thực hiện toàn bộ hoặc không phải tất cả.

Khái niệm giao dịch được thúc đẩy bởi hai mối quan tâm hoàn toàn độc lập. Một phải làm với việc truy cập đồng thời vào cơ sở dữ liệu của nhiều máy khách, và cái kia liên quan đến việc có một hệ thống có khả năng chống lại các lỗi hệ thống.

Giao dịch hỗ trợ những gì được gọi là thuộc tính ACID:

  • A: Tính nguyên tử;
  • C: Tính nhất quán;
  • I: Cô lập;
  • D: Độ bền.


1

Tôi đề nghị rằng một định nghĩa về 'xử lý giao dịch' sẽ hữu ích hơn, vì nó bao hàm các giao dịch như một khái niệm trong khoa học máy tính.

Từ wikipedia:

Trong khoa học máy tính, xử lý giao dịch là xử lý thông tin được chia thành các hoạt động riêng lẻ, không thể phân chia được, được gọi là giao dịch. Mỗi giao dịch phải thành công hoặc thất bại như một đơn vị hoàn chỉnh; nó không thể duy trì ở trạng thái trung gian.

http://en.wikipedia.org/wiki/Transaction_processing#Implementations


1

Ngoài các câu trả lời trên, cần lưu ý rằng, ít nhất về lý thuyết, không có giới hạn nào đối với loại tài nguyên nào có liên quan đến một giao dịch.

Hầu hết thời gian, nó chỉ là một cơ sở dữ liệu hoặc nhiều cơ sở dữ liệu riêng biệt, nhưng cũng có thể hình dung rằng máy in tham gia vào một giao dịch và có thể khiến giao dịch đó không thành công, chẳng hạn như trong trường hợp kẹt giấy.


1

Giao dịch có thể được định nghĩa là một tập hợp các tác vụ được coi là đơn vị xử lý tối thiểu. Mỗi đơn vị xử lý tối thiểu không thể được chia nhỏ hơn nữa.

Hoạt động chính của một giao dịch là đọc và ghi.

Tất cả giao dịch phải chứa bốn thuộc tính thường được gọi là thuộc tính ACID nhằm mục đích đảm bảo tính chính xác, đầy đủ và toàn vẹn dữ liệu.


0

Tôi nghĩ rằng một giao dịch là một hành động nguyên tử về mặt DBMS.

điều đó có nghĩa là nó không thể được tách biệt. vâng, trong một quá trình chuyển đổi, có thể có một số hướng dẫn để hệ thống thực thi. nhưng chúng được liên kết với nhau để hoàn thành một nhiệm vụ cơ bản duy nhất.

ví dụ. bạn cần đi bộ qua một cây cầu (hãy coi điều này như một sự chuyển tiếp) và để làm được điều này, giả sử, bạn cần 100 bước. về tổng thể, các bước này không thể tách rời. khi bạn đã hoàn thành một nửa trong số chúng, chỉ có hai sự lựa chọn cho bạn: tiếp tục hoàn thành tất cả và quay lại điểm bắt đầu. nó giống như kết quả của một giao dịch: thành công (cam kết) và thất bại (khôi phục)


0

Giao dịch là một đơn vị xử lý dữ liệu không thể phân chia -Tất cả các giao dịch phải có các thuộc tính ACID:

nghĩa là: Tính nguyên tử, Tính nhất quán, Tính cô lập và Giao dịch lâu bền là tất cả hoặc không có gì nhưng không xen kẽ với nhau (có nghĩa là nếu bạn chuyển tiền của mình từ tài khoản này sang tài khoản khác, tài khoản này phải mất nhiều đó và tài khoản khác phải thu được số tiền đó, nhưng nếu bạn chuyển tiền từ một tài khoản và tài khoản khác vẫn trống sẽ không phải là một giao dịch)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.