Có cách nào chúng tôi có thể hoàn tác truy vấn cập nhật SQL không?Cập nhật SQL hoàn tác
Trả lời
Bạn không thể trừ khi bạn chạy nó trong một số transaction.
Tùy thuộc vào giao dịch DBMS của bạn sẽ được xử lý khác nhau, vì vậy hãy đọc tài liệu. Ví dụ với mysql dưới đây là cách nó đi:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET [email protected] WHERE type=1;
COMMIT;
Với Postresql:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
-- etc etc
COMMIT;
Với TSQL:
DECLARE @TranName VARCHAR(20)
SELECT @TranName = 'MyTransaction'
BEGIN TRANSACTION @TranName
GO
USE pubs
GO
UPDATE roysched
SET royalty = royalty * 1.10
WHERE title_id LIKE 'Pc%'
GO
COMMIT TRANSACTION MyTransaction
GO
Ngoài ra còn có một số hành động mà không thể được đưa vào một giao dịch , nhưng trong hầu hết các hệ thống quản lý cơ sở dữ liệu, bạn có thể tìm thấy những ngày này, bạn sẽ có thể khôi phục một số update
.
Cuối cùng, bạn luôn có thể hoàn tác bản cập nhật nếu bạn lưu nhật ký chính xác mọi thứ xảy ra trong cơ sở dữ liệu, nhưng đó là một câu chuyện khác.
Nếu bạn chạy bản cập nhật bên trong một giao dịch, bạn có thể khôi phục giao dịch.
SQL Server:
begin transaction
update [Table] set col1 = 'test' where Id = 3
rollback transaction
kỹ thuật khác có thể là để thêm một bản cập nhật kích hoạt để bàn, và bất cứ lúc nào các bản ghi được cập nhật, lưu giá trị trước đó tắt thành một "lịch sử" bảng. Điều này có thể hoặc có thể không phải là một ý tưởng tốt nếu bảng này được sử dụng nhiều.
Hoàn tác được gọi là rollback
trong SQL. Khi bạn đã hoàn tất commit
, bạn không thể hoàn tác tác vụ này mà không cần khôi phục bản sao lưu. Lưu ý rằng việc thực hiện khôi phục sẽ hoàn tác toàn bộ giao dịch, có nghĩa là mọi cập nhật, chèn và xóa kể từ khi giao dịch bắt đầu, thường là từ lần commit hoặc rollback cuối cùng. Điều này có nghĩa là nếu bạn thực hiện hai cập nhật liên tiếp, bạn không thể hoàn tác bản cập nhật thứ hai. Một số cơ sở dữ liệu cung cấp "điểm lưu trữ" cho phép điều này.
Chỉ khi bạn đang ở trong một giao dịch (như marcgg) cho biết hoặc nếu bạn có một bản sao lưu gần đây ... hồi phục cách mà không căng thuật ngữ "undo" rathermuch ..
Bạn có thể sử dụng một công cụ của bên thứ ba giống như Cổng Đỏ Log Rescue. Có 14 ngày dùng thử miễn phí, chức năng của Bộ công cụ SQL của họ. (Giả sử SQL Server 2000!).
Máy chủ SQL không hỗ trợ tính năng này ra khỏi hộp nhưng trong một số trường hợp, có thể khôi phục dữ liệu bằng cách đọc nhật ký giao dịch. Điều này hoạt động nếu cơ sở dữ liệu ở chế độ khôi phục đầy đủ và các công cụ của bên thứ 3 như ApexSQL Log hoặc Log Rescue là cần thiết. Ngoài ra còn có một cách để đọc t-log sử dụng lệnh DBCC LOG nhưng nó có lẽ sẽ trở nên quá khó khăn.
Bạn cũng có thể kiểm tra chủ đề sau nơi này sẽ được thảo luận:
- 1. Tortoise Subversion - hoàn tác cập nhật
- 2. cách hoàn tác cập nhật gói
- 3. Tôi có thể "hoàn tác" bản cập nhật LINQ to SQL không?
- 4. Tôi có thể hoàn tác cập nhật Meteor không?
- 5. làm thế nào để hoàn tác cập nhật git submodule
- 6. Cách hoàn tác yêu cầu Cập nhật FactoryF23
- 7. TortoiseSVN - Hoàn tác hoàn nguyên
- 8. TortoiseSVN hoàn nguyên và cập nhật
- 9. php cập nhật sql từ mẫu
- 10. Cập nhật nhiều hàng LINQ vs SQL
- 11. Cập nhật SQL trong bộ dữ liệu
- 12. Cập nhật trình kích hoạt T-SQL
- 13. Cập nhật PL/SQL Tham gia?
- 14. Cập nhật nhiều bản ghi trong SQL
- 15. Cập nhật bằng LINQ to SQL
- 16. C#, SQL cập nhật nhiều hàng
- 17. T-SQL Chèn hoặc cập nhật
- 18. SQL cập nhật top1 hàng truy vấn
- 19. php sql cập nhật tham gia
- 20. Sử dụng biệt trong SQL Cập nhật
- 21. truy cập cập nhật truy vấn sql nhiều giá trị
- 22. Cách hoàn nguyên bản cập nhật phần mềm trong Eclipse
- 23. Hoàn tác Git Clean
- 24. Hoàn tác [UIGestureRecognizer * requireGestureRecognizerToFail]
- 25. Bản cập nhật Winform về các tác vụ chạy dài
- 26. Hoàn tác triển khai - Thao tác DOM
- 27. SQL Server có bất kỳ loại tính năng hoàn tác ma thuật nào không?
- 28. Máy chủ SQL - thực hiện [SELECT] khóa [CẬP NHẬT]?
- 29. cập nhật cơ sở dữ liệu sql với ContentValues và phương thức cập nhật
- 30. Cập nhật NHibernate trên thuộc tính đơn cập nhật tất cả các thuộc tính trong sql
Bạn không nói gì cơ sở dữ liệu bạn đang sử dụng.Nếu bạn đang sử dụng oracle, bạn có thể thử một truy vấn flashback để có được dữ liệu sai lầm của bạn trở lại. –