Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution
    Đăng nhập
    Đăng nhập

    Đề bài: [SQL 6.4] Khớp lệnh mua trong một transaction (ACID)

    📖Cần ôn lý thuyết? Đọc bài giảng Buổi 6: Thay đổi dữ liệu: INSERT, UPDATE, DELETE — khóa SQL

    Lệnh mua order_id = 27 đang PENDING và vừa được khớp toàn bộ ở giá của lệnh. Việc ghi nhận gồm 4 thao tác phải nguyên tử (tất cả hoặc không gì cả) nên đặt trong một transaction rồi COMMIT:

    1. Cập nhật Orders: lệnh 27 status = 'MATCHED'.
    2. Thêm Trades: trade_id = 87, order_id = 27, symbol/quantity/price lấy từ chính lệnh 27 (dùng INSERT ... SELECT), trade_date = '2026-09-25'.
    3. Trừ tiền: giảm balance của tài khoản đặt lệnh 27 đi quantity × price của lệnh.
    4. Cộng chứng khoán: tăng Portfolio.quantity của tài khoản đó, đúng mã của lệnh, thêm quantity của lệnh (tài khoản này đã nắm giữ mã đó).

    Mọi số liệu (tài khoản, mã, số lượng, giá) phải lấy từ dữ liệu của lệnh 27 bằng subquery/INSERT ... SELECT, không gõ cứng. Các lệnh, tài khoản và dòng danh mục khác không được đổi.

    Đây là minh họa tính Atomicity và Consistency của ACID: nếu bước 3 thất bại mà bước 2 đã ghi, dữ liệu sẽ sai lệch — transaction ngăn điều đó.

    • Định dạng đầu vào:

      Orders, Trades, Accounts, Portfolio.

    • Định dạng đầu ra:

      (Chấm theo trạng thái dữ liệu: trạng thái lệnh 27, giao dịch 87, số dư tài khoản, danh mục và các tổng.)

    Ví dụ:

    Đầu vào:

    Đầu ra:

    MATCHED	87	VCS	200	60000.00	2026-09-25	55000000.00	300	87	66975000000.00	306000	70

    Giải thích:

    Lệnh 27: tài khoản 62 mua 200 VCS giá 60.000 → trừ 12.000.000 và cộng 200 cổ phiếu VCS vào danh mục (100 → 300).

    Chủ đề

    📊 SQLSQLSQL: Buổi 6 – INSERT, UPDATE, DELETETất cả môn học

    Đang tải editor...