当前位置:Gxlcms > 数据库问题 > SQL入门经典(十) 之事务

SQL入门经典(十) 之事务

时间: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入门经典(十) 之事务

标签:

人气教程排行