Một transaction sẽ không được xem là thành công khi chỉ cần một thao tác đơn nào đó trong nó không hoàn thành. Trong bài viết này STV sẽ hướng dẫn các bạn cách sử dụng transaction trong MySQL và trong Laravel.
Laravel transaction
Php mysql transaction
Trong bất kỳ database nào, sự yếu kém trong việc quản lý các thao tác với dữ liệu thường dẫn tới các vấn đề về xung đột và hiệu năng trong hệ thống có nhiều users, Khi số lượng users thao tác với dữ liệu ngày một tăng, việc quản lý thao tác dữ liệu hiệu sao cho quả là vô cùng quan trọng.
SQL sử dụng để đảm bảo tính toàn vẹn dữ liệu cho mỗi transaction và cách ứng dụng quản lý các transaction hiệu quả.
Ví dụ đơn giản nhất là tiến trình cài đặt phần mềm hoặc gỡ bỏ phần mềm. Việc cài đặt được chia thành các bước, thực hiện tuần tự từ đầu đến cuối, nếu toàn bộ các bước thực thi thành công đồng nghĩa với việc tiến trình cài đặt hoặc gỡ bỏ phần mềm thành công và ngược lại, một phép thất bại thì tiến trình phải rollback lại tức sẽ không có bất kỳ thay đổi nào trên máy tính.
Transaction sql server
Transaction là 1 tập các câu lệnh thực thi tới database, các câu lệnh được thực thi 1 cách tuần tự, nếu có bất kỳ lệnh nào bị lỗi, transaction sẽ dừng lại và roll back DB tất cả các câu lệnh đã thực thi, trả lại database như lúc start transaction.
Transaction có một chuẩn được gọi tắt là ACID bao gồm 4 thuộc tính:
- Atomicity (Tính tự trị): Đảm bảo tất cả các hành động trong phạm vi một đơn vị transaction là thành công hoàn toàn. Ngược lại, transaction sẽ bị dừng ngay ở thời điểm lỗi, và sẽ phục hồi quay ngược (rollback) lại thời điểm chưa xảy ra sự thay đổi.
- Consistency (Tính nhất quán): Đảm bảo tất cả các thao tác trên cơ sở dữ liệu được thay đổi sau khi giao dịch thành công và không xảy ra lỗi.
- Isolation (Tính cô lập): Đảm bảo transaction này hoạt động độc lập so với transaction khác. Ví dụ C đang chuyển tiền thì sẽ không liên quan tới D chuyển tiền.
- Durability (Tính bền vững): Đảm bảo kết quả hoặc tác động của transaction vẫn luôn tồn tại, kể cả khi hệ thống xảy ra lỗi.
Trong Laravel bạn có thể dùng transaction đơn giản bằng 2 cách:
Cách thủ công
Để bắt đầu transaction: DB::beginTransaction();
Để rollback: DB::rollBack();
Để commit: DB::commit();
Cách tự động:
Nếu có lỗi xảy ra thì sẽ tự động rollback và ngược lại nếu thành công thì sẽ tự động commit:
DB::transaction(function () { $user = User::findOrFail($id); $order = Order::create([ 'user_id' => $user->id, 'money' => 1000000, ]); $availableAmount = $user->amount - 1000000; $user->update(['amount' => $availableAmount]); });
Nguyễn Minh Hiếu (Website: sieutocviet.net)
Với hơn 3 năm kinh nghiệm Python / PHP / CSS / JS / WORDPRESS, 5 năm kinh nghiệm trong quản trị website tư vấn giải pháp SEO từ khóa, Marketing tối ưu nhất cho doanh nghiệp. Chuyên viên tư vấn sản phẩm: Hosting, Email doanh nghiệp, VPS, App web design.
Hiện đang là trưởng phòng kinh doanh tại Siêu Tốc Việt.