mar*_*cgg 18
根据您的DBMS事务将以不同方式处理,因此请阅读文档.例如,使用mysql,它是如何进行的:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
Run Code Online (Sandbox Code Playgroud)
使用Postresql:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
-- etc etc
COMMIT;
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
还有一些操作无法放入事务中,但在大多数数据库管理系统中,您现在可以找到应该能够回滚的操作update.
最后,如果您保留数据库中发生的所有事情的精确日志,您始终可以撤消更新,但这是另一个故事.
SQL Server不支持开箱即用,但在某些情况下,可以通过读取事务日志来恢复数据.如果数据库处于完全恢复模式并且需要第三方工具(如ApexSQL Log或Log Rescue),则此方法有效.还有一种使用DBCC LOG命令读取t-log的方法,但它可能会变得太难.
您还可以查看以下讨论的主题:
如何在SQL Server 2005中回滚UPDATE查询?
阅读SQL Server 2008中的日志文件(*.LDF)
如果在事务中运行更新,则可以回滚事务.
SQL Server:
begin transaction
update [Table] set col1 = 'test' where Id = 3
rollback transaction
Run Code Online (Sandbox Code Playgroud)
另一种技术可能是向表中添加更新触发器,并且无论何时更新记录,都将先前的值保存到"历史"表中.如果大量使用此表,这可能是也可能不是一个好主意.
| 归档时间: |
|
| 查看次数: |
81621 次 |
| 最近记录: |