Phục hồi MySQL sau INSERT
tôi tò mò muốn biết nếu tôi cập nhật một vài dữ liệu trong bảng do nhầm lẫn thì làm cách nào để khôi phục những thay đổi đó Show
tương tự cũng được áp dụng cho chèn và xóa. vui lòng chia sẻ một số sql giúp tôi khôi phục dữ liệu để chèn/cập nhật và xóa. cảm ơn Bình luận Nhận xét · Hiển thị 1 Bình luận 5. Cần 1600 ký tự còn lại ký tự
▼
tệp đính kèm. Có thể sử dụng tối đa 10 tệp đính kèm (bao gồm cả hình ảnh) với tối đa 3. 0 MiB mỗi cái và 30. tổng cộng 0 MiB Các giao dịch trong SQL Server được sử dụng để thực thi một tập hợp các câu lệnh SQL trong một nhóm. Với các giao dịch, tất cả các câu lệnh trong một nhóm đều thực thi hoặc không có câu lệnh nào thực thi Trong trường hợp một trong các truy vấn trong một nhóm truy vấn được thực hiện bởi một giao dịch không thành công, tất cả các truy vấn đã thực hiện trước đó sẽ được khôi phục. Các giao dịch trong máy chủ SQL được khôi phục tự động. Tuy nhiên, với câu lệnh rollback SQL, bạn có thể rollback thủ công một giao dịch dựa trên các điều kiện nhất định Trong bài viết này, bạn sẽ thấy giao dịch là gì và cách khôi phục giao dịch theo cách thủ công và tự động Trước tiên, hãy tạo tập dữ liệu giả để bạn thực hành trừ khi bạn tự tin 100% rằng cơ sở dữ liệu của mình được hỗ trợ đầy đủ Tạo cơ sở dữ liệu giảĐoạn script sau tạo một cơ sở dữ liệu giả có tên BookStore với một bảng, tôi. e. , Sách. Bảng Sách có bốn cột. id, tên, danh mục và giá 1 2 3 4 5 6 7 8 9 10 TẠO Cơ sở dữ liệu Cửa hàng sách; ĐI SỬ DỤNG Cửa hàng sách; TẠO BẢNG Sách ( id INT, tên VARCHAR(50) NOT NULL, danh mục VARCHAR(50) NOT NULL, giá INT NOT NULL ) Bây giờ hãy thêm một số bản ghi giả trong bảng Sách 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SỬ DỤNG Cửa hàng sách
CHÈN VÀO Sách
GIÁ TRỊ (1, 'Book1', 'Cat1', 1800), (2, 'Book2', 'Cat2', 1500), (3, 'Book3', 'Cat3', 2000), (4, 'Book4', 'Cat4', 1300), (5, 'Book5', 'Cat5', 1500), (6, 'Book6', 'Cat6', 5000), (7, 'Book7', 'Cat7', 8000), (8, 'Book8', 'Cat8', 5000), (9, 'Book9', 'Cat9', 5400), (10, 'Book10', 'Cat10', 3200) Đoạn script trên thêm 10 bản ghi giả vào bảng Books Thực hiện nhiều truy vấn mà không cần sử dụng giao dịchTrong phần này, chúng ta sẽ thấy các vấn đề xảy ra nếu chúng ta thực hiện nhiều truy vấn trong một nhóm mà không có giao dịch. Trong phần sau, chúng ta sẽ xem cách các giao dịch có thể được sử dụng để khôi phục truy vấn SQL tự động và thủ công cũng như xử lý các vấn đề này Nhìn vào đoạn script sau 1 2 3 4 5 6 CHÈN VÀO Sách GIÁ TRỊ (15, 'Book15', 'Cat5', 2000) CẬP NHẬT Sách SET giá = '25 Trăm' WHERE< id = 15 XÓA khỏi Sách WHERE id = 15 Trong đoạn script trên, chúng tôi thực hiện ba truy vấn. Truy vấn đầu tiên chèn một bản ghi mới trong bảng Sách có id của bản ghi là 15. Truy vấn thứ hai cập nhật giá sách với id 15. Cuối cùng, truy vấn thứ ba xóa bản ghi với id 15. Nếu bạn thực hiện truy vấn trên, bạn sẽ thấy lỗi sau Lỗi này khá dễ hiểu. Nó nói rằng chúng ta không thể gán giá trị chuỗi '25 Hundred' cho cột 'id', thuộc loại số nguyên. Do đó, truy vấn thứ hai không thực hiện được. Tuy nhiên, vấn đề với tập lệnh trên là trong khi truy vấn thứ hai không thành công, truy vấn đầu tiên vẫn thực thi. Bạn có thể xác minh điều này bằng cách chọn tất cả các bản ghi từ bảng Sách, như được hiển thị bên dưới Điều gì sẽ xảy ra nếu bạn thực sự muốn là nếu truy vấn thứ hai không thành công, thì truy vấn đầu tiên cũng sẽ được khôi phục để bạn quay lại trạng thái ban đầu trước khi thực hiện truy vấn? Để đạt được điều này, bạn cần sử dụng các giao dịch Tự động khôi phục các giao dịch SQLNhư tôi đã nói trước đó, nếu một trong các truy vấn trong một nhóm truy vấn được thực hiện bên trong một giao dịch không thành công, thì tất cả các câu lệnh SQL đã thực hiện trước đó sẽ bị khôi phục. Hãy xem cách các giao dịch có thể được sử dụng để khôi phục các truy vấn SQL 1 2 3 4 5 6 7 8 9 10 11 12 BẮT ĐẦU GIAO DỊCH
CHÈN VÀO Sách GIÁ TRỊ (20, 'Book15', 'Cat5', 2000)
CẬP NHẬT Sách ĐẶT giá = '25 Trăm' WHERE id = 20
XÓA khỏi Sách WHERE id = 20
CAM KẾT GIAO DỊCH Để bắt đầu một giao dịch, câu lệnh BEGIN TRANSACTION được sử dụng, theo sau là tập hợp các truy vấn mà bạn muốn thực hiện bên trong giao dịch. Để đánh dấu kết thúc một giao dịch, có thể sử dụng câu lệnh COMMIT TRANSACTION Trong đoạn mã trên, chúng tôi thực hiện ba truy vấn SQL giống như chúng tôi đã thực hiện trong phần trước. Tuy nhiên, lần này các truy vấn đã được thực hiện bên trong một giao dịch. Một lần nữa, truy vấn đầu tiên sẽ thực hiện thành công và sẽ xảy ra lỗi khi thực hiện truy vấn thứ hai. Vì các truy vấn đang được thực thi bên trong một giao dịch, lỗi của truy vấn thứ hai sẽ khiến tất cả các truy vấn đã thực hiện trước đó bị khôi phục. Bây giờ, nếu bạn chọn tất cả các bản ghi từ bảng Sách, bạn sẽ không thấy bản ghi mới có id 20, được chèn bởi truy vấn đầu tiên bên trong giao dịch Phục hồi thủ công các giao dịch SQLTrong phần trước, bạn đã thấy cách các giao dịch tự động lùi lại nếu một trong các truy vấn không thể thực hiện thành công. Tuy nhiên, bạn cũng có thể muốn khôi phục truy vấn dựa trên các điều kiện nhất định. Ví dụ: bạn có thể muốn khôi phục giao dịch chèn một bản ghi vào bảng sách nếu đã tồn tại một cuốn sách có cùng tên Trong trường hợp đó, bạn có thể sử dụng câu lệnh SQL rollback Nhìn vào ví dụ sau 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 KHAI BÁO @Đếm sách int
BEGIN GIAO DỊCH AddBook
CHÈN VÀO Sách GIÁ TRỊ (20, 'Book15', 'Cat5', 2000)
SELECT @BookCount = COUNT(*) FROM Books WHERE name = 'Book15'
IF @Đếm sách > 1 BẮT ĐẦU QUAY LẠI GIAO DỊCH AddBook IN 'Đã tồn tại một cuốn sách có cùng tên' END KHÔNG BẮT ĐẦU CAM KẾT GIAO DỊCH Thêm sinh viên IN 'Sách mới đã được thêm thành công' END Trong đoạn mã trên, chúng tôi khai báo một biến @BookCount. Tiếp theo, chúng tôi tạo một giao dịch có tên AddBook. Để tạo một giao dịch được đặt tên, bạn chỉ cần chuyển bất kỳ tên chuỗi nào cho giao dịch sau câu lệnh BEGIN TRANSACTION Trong giao dịch, một cuốn sách có id 20 và tên Book15 được chèn vào bảng Sách. Sau đó, hàm COUNT được sử dụng để đếm các Sách có tên Book15 Nếu số lượng lớn hơn 1, điều đó có nghĩa là một cuốn sách đã tồn tại với tên Book15. Trong trường hợp này, câu lệnh SQL khôi phục được sử dụng để khôi phục giao dịch AddBook theo cách thủ công; Bạn có thể thấy rằng cú pháp của câu lệnh SQL rollback rất đơn giản. Bạn chỉ cần viết câu lệnh ROLLBACK TRANSACTION, theo sau là tên của giao dịch mà bạn muốn rollback Bây giờ, hãy thử chạy giao dịch AddBook để chèn bản ghi có tên là Book15 (đảm bảo rằng không có cuốn sách nào có tên này tồn tại trong bảng Sách) Bạn sẽ thấy rằng giao dịch sẽ thực hiện thành công và thông báo sau sẽ được hiển thị cho người đọc Bây giờ, hãy thử chạy lại giao dịch AddBook. Bạn sẽ thấy rằng lần này giao dịch sẽ thất bại vì một cuốn sách có tên Book15 đã tồn tại trong cơ sở dữ liệu. Do đó, giao dịch sẽ được khôi phục với thông báo sau được hiển thị cho người dùng Phần kết luậnBài viết giải thích cách rollback truy vấn SQL sử dụng giao dịch. Các truy vấn có thể được khôi phục tự động hoặc thủ công thông qua các giao dịch. Tự động khôi phục xảy ra khi một truy vấn không thực hiện được vì bất kỳ lý do gì. Phục hồi thủ công xảy ra tùy thuộc vào điều kiện do người dùng xác định. Câu lệnh rollback SQL được sử dụng để rollback các truy vấn SQL theo cách thủ công trong SQL Server ROLLBACK có hoạt động khi chèn không?CHÈN sẽ tự động cam kết hoặc, trong trường hợp xảy ra lỗi, khôi phục . Nếu INSERT không có trong giao dịch rõ ràng, SQL Server sẽ tự động thực hiện thao tác trong giao dịch ngầm để đảm bảo hành vi nguyên tử.
Chúng tôi có thể ROLLBACK sau khi CAM KẾT trong MySQL không?COMMIT lưu vĩnh viễn các thay đổi được thực hiện bởi giao dịch hiện tại. ROLLBACK hoàn tác các thay đổi được thực hiện bởi giao dịch hiện tại. 2. Giao dịch không thể hoàn tác các thay đổi sau khi thực hiện CAM KẾT .
Bạn có thể ROLLBACK sau khi cam kết không?Không thể khôi phục giao dịch sau khi câu lệnh CAM KẾT GIAO DỊCH được thực thi , trừ khi GIAO DỊCH CAM KẾT được liên kết với giao dịch lồng nhau có trong giao dịch đang được khôi phục.
Làm cách nào để ROLLBACK thay đổi trong MySQL?rollback( conn ) đảo ngược các thay đổi được thực hiện đối với cơ sở dữ liệu bằng các hàm như sqlwrite . Hàm rollback đảo ngược tất cả các thay đổi được thực hiện kể từ thao tác CAM KẾT hoặc ROLLBACK cuối cùng. Để sử dụng chức năng này, bạn phải đặt thuộc tính AutoCommit của đối tượng kết nối thành tắt. |