SQL中什么是事务

本文详细介绍了SQL中的事务概念,包括其四大特性:原子性、一致性、隔离性和持久性。通过实例展示了事务如何保证数据完整性,防止并发操作带来的数据混乱。在事务中,当SQL语句执行出错时,所有改动将被回滚,确保数据的一致性。文章还演示了如何使用BEGIN TRANSACTION、COMMIT和ROLLBACK语句进行事务管理。
摘要由CSDN通过智能技术生成

SQL中什么是事务

  • 事务的概念:

事务是在数据库上按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以由某种数据库程序自动执行。事务就是一些SQL语句组(每条单独的SQL语句也算一个事务),其中事务中的SQL语句一个执行失败,其余全部回滚。

  • 事务的特点:

原子性:事务中的SQL语句的操作都是一个整体,是不可分割的,并不会只执行其中一句,保证事务中的所有操作都执行完毕,其中事务里一个SQL语句出错,整个事务全部回滚,回滚到之前操作的原始状态

一致性:如果事务成功执行,在同一个时间点的所有事务读取的信息一致。

隔离性:每个事务都互不影响,保证不同的事务相互独立、透明地执行。

持久性:当事务执行完毕时,它对数据的影响会保存到数据库中,即使出现系统故障,之前成功执行的事务的结果也会持久存在。

  • 事务的意义:

事务的存在保证了数据的完整性,事务中对数据的更改不会因为一个SQL语句错误而更改其他相应数据,当多个应用程序在高并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰

  • 事务的示例

创建一个数据库

--创建名字为 INDEXK 的数据库
create database INDEXK
go
use INDEXK
go

创建一个数据表

--创建一个用户信息表
create table INFO
(
	ID int primary key identity,						--主键
	Name varchar(20) not null,							--姓名
	Value int not null check(Value<110 and Value>0)		--金额
)

用户表中,我们添加约束金额数量不得大于110元,(以便体现后面出事务的重要性)

向表中添加数据

--添加相应数据(张三,李四)
insert into INFO values('张三',100),('李四',90)

问题:李四想转账给张三10元,(李四Values-10,张三Values+10)

我们可以看出,这时李四的金额扣10元,张三的金额加10元就可以了。
如果我们不用事务,正常的SQL语句就是这样;

--修改相应数据
update INFO
set Value = 110
where Name = '张三'
update INFO
set Value = 80
where Name = '李四'

可是如果在执行语句出错时,或者在运行SQL语句时出现各种错误(这里错误是约束报错:超出约束值),那么数据会怎么样变化呢?
报错信息
表中数据信息
我们可以看出当上一个语句报错时,第二个语句继续执行,可是这样就违背了我们数据的完整性,所以,我们在处理SQL语句时,我们常常套用事务来一起处理,我们一起来看看事务的作用

事务使用

事务语句:
begin transaction 事务名
SQL语句
if @@ERROR!=0 --@@ERROR 如果前一个T-SQL语句没有出现错误,则返回0.
rollback transaction --回滚(撤销事务)
else
commit transaction 事务名 --提交事务

//语句解析
begin transaction --意思为开启一个事务
@@ERROR --是为一个错误代码,当SQL语句发生错误时,函数会被附上值,
rollback transaction --回滚(撤销事务)
commit transaction --提交事务

--开启一个名为t1_INFO的事务
begin transaction t1_INFO

update INFO
set Value = 80
where Name = '李四'
update INFO
set Value=110
where Name = '张三'

if @@ERROR!=0							--@@ERROR  如果前一个T-SQL语句没有出现错误,则返回0.
   rollback transaction					--回滚(撤销事务)
   else
   
commit transaction t1_student	--提交事务

我们在去执行这个事务时
事务执行信息

事务执行结果
我们发现,数据并没有被修改,事务中SQL修改数据发生错误,不过哪一个出现错误,整个事务的SQL语句都不会被执行(全部回滚),这样就保证了数据的完整性

问题:张三想转账给李四10元,(张三Values-10,李四Values+10)

如果转账的人反过来呢(约束值并未超过)

--开启一个名为t1_INFO
begin transaction t1_INFO

update INFO
set Value=90
where Name = '张三'
update INFO
set Value = 100
where Name = '李四'

if @@ERROR!=0	--@@ERROR  如果前一个T-SQL语句没有出现错误,则返回0.
   rollback transaction		--回滚(撤销事务)
   else
commit transaction t1_student	--提交事务

事务执行信息
事务执行结果

可以看出SQL语句都能正常执行这样保证了数据的一致性
好了,SQL事务就讲到这里了,欢迎大家留言评论

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值