时间:2021-07-01 10:21:17 帮助过:2人阅读
USE panda --继续用这个数据库 GO SELECT * FROM dbo.test002 --结果集合 --4 122 22 xxx@qq.com 112 --6 122 22 x22xx@qq.com 31222 --12 231 3334 qxxfs@qq.com 18612345678 BEGIN TRAN UPDATE dbo.test002 SET name=‘test‘ --本来修改ID 为12的数据。忘记写WHERE 过滤了 SELECT * FROM dbo.test002 --结果集合 --4 test 22 xxx@qq.com 112 --6 test 22 x22xx@qq.com 31222 --12 test 3334 qxxfs@qq.com 18612345678 --在查询一次 表示我误伤了所有数据。 那就进行回滚: ROLLBACK TRAN SELECT * FROM dbo.test002 --结果集合 --4 122 22 xxx@qq.com 112 --6 122 22 x22xx@qq.com 31222 --12 231 3334 qxxfs@qq.com 18612345678 数据正常了
如果多条语句呢?如下图
BEGIN TRAN UPDATE dbo.test002 SET name=‘test‘ begin TRAN UPDATE dbo.test003 SET name=‘test‘ ROLLBACK TRAN --这条语句执行后,前面2条事务语句全部回滚。 COMMIT TRAN --数据会更新完毕。
数据脏读:我执行BEGIN TRAN UPDATE dbo.test002 SET name=‘test‘ ,有些人胆子大来获取数据,我在ROLLBACK STRN些,那他就倒霉了,这就脏读。。。
非重复读取:非重复度很容易跟脏读混淆。只知道这个术语就可以了。
幻读:只是在偶然的机会会出现。很少会出现。它在运行更新语句的时候,有人执行添加语句。
丢失更新:说的事例,你经理在看某个员工的工资表时候。员工A可以加工资了。你把员工A的工资从5000上调5500了。人事部B也在看A的信息。只是修改A的人事信息。在同时更新时候覆盖了事务1.
接着SQL入门经典(九)的视图:
说些@@EERROR这个系统错误号。
先看SQL语句在一句句解释
declare @count int ; set @count=0; BEGIN TRAN UPDATE dbo.test003 set name=‘test‘ where ID=4 select @count=@count+@@ERROR; INSERT dbo.test003 VALUES(15,GETDATE(),‘TEST_5‘)--这条语句会失败@@ERROR这个值会>0 select @count=@count+@@ERROR; if(@count>0) ROLLBACK TRAN ELSE COMMIT TRAN --(0 行受影响) 说明@@ERROR是个错误号。如果发生错误就是>0的数字
TRY CATCH 看下面SQL语句
BEGIN TRY --TRY 开始 BEGIN TRAN UPDATE dbo.test003 set name=‘test‘ where ID=4 INSERT dbo.test003 VALUES(15,GETDATE(),‘TEST_5‘) COMMIT TRAN END TRY --TRY结束 BEGIN CATCH --如果TRY 发生错误就执行这里面语句 ROLLBACK TRAN END CATCH --这句代码执行结果是(0 行受影响)说明COMMIT TRAN 没有执行。执行了ROLLBACK TRAN -- INSERT dbo.test003 VALUES(15,GETDATE(),‘TEST_5‘) -- 改为 --INSERT dbo.test003 VALUES(2,GETDATE(),‘TEST_5‘) --(2行受影响)TRY里面没有错误,就执行COMMIT TRAN不会执行CATCH里的代码
SQL入门经典(十) 之事务
标签: