SQL Server 2005系列教学(17) 事务

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
事务在数据库中应该是很重要的一个概念。在这里只是简单介绍.详细内容会在数据库实践课中介绍
 
 
在使用DELETEUPDATE命令对数据库进行更新时,一次只能操作一个表,这就带来数据库的数据不一致的问题。先修改一个表然后再修改另一个表,但就在你对一个表操作之后,在另一个操作之前会产生一个数据停滞的问题。例如企业取消了后勤部,需要将后勤部从部门表中删除,要修部门表,而员工表中的后勤部的员工怎么办,也应该删除。因此,这两个表都需要修改,这种修改只能通过两条DELETE语句进行。假设后勤部编号为‘1012
第一条DELETE语句修改部门表
DELETE FROM 部门表  where 部门编号=1012
第二条DELETE语句修改员工表
Delete from  员工表 where 部门编号=’1012’
如果第一条语句执行了,第二条还没有执行,会出现什么情况?
但此时部门表中还仍然有后勤部的员工存在,这就是数据的不一致!只有执行完第二个DELETE语句之后,数据才重新处于一致状态。但是如果执行完第一条语句后,计算机突然出现故障,网络出现故障,或数据库有问题,无法再继续执行第二条DELETE语句,则数据库中的数据将处于一个永远不一致的状态。因此必须保证这两条DELETE语句同时执行。为解决类似的问题,数据库系统通常都引入了事务transaction的概念。通过事务来解决数据不一致的问题。用来保证数据库的完整性,保证一系列的数据操作可以全部正确完成,不会造成数据操作到一半未完成。
 
常用的事务处理语句包括:
COMMIT WORK:把当前事务所作的更改永久化(写入磁盘)即成功生效
ROLLBACK:作废上次提交以来的所有更改,也就是说这次事务失效,不成功。
 
 
事务:指作为单个逻辑工作单元执行的一系列操作,而这些逻辑工作单元需要具有原子性,一致性,隔离性和持久性四个属性。统称为ACID属性。
 
原子性:指事务必须是原子工作单元,不可分隔性,即对于事务所进行数据修改,要么全部执行,要么全都不执行。
一致性:指事务在完成时,必须使所有的数据都保持一致性状态,而且在相关数据库中,所有规则都必须应用于事务的修改。以保持所有数据的完整性。
也就是说,如果有多个表中放有一个人的信息,那如果你要修改这个人的信息,就必须多个表中的信息都要修改,不能有的修改,有的不修改。
隔离性:指由并发事务所做的修改必须与任何其他并发事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一事务修改之后的状态,即事务不会查看正在由另一个并发事务正在修改的数据。
持久性:指事务完成之后,它对于系统的影响是永久性的,即使系统出现故障也是如此。比如说,我们把一个人的记录放在磁盘上这后,停电了,这个人的记录已经存在磁盘上了,不可能来电以后又没有了。!
 
事务的类型:隐式事务和显式事务
隐式事务:每次执行SQL Server 的任何数据修改语句时,它都是一个隐式事务。例如:下列SQL语句是一个独立事务:也就是咱们所说的三种基本操作。
Insert table values (1,’abc’)
Update table set coll=5 where coll=1
Delete from table1 where coll=5
Go
首先来看一下INSERT语句,如果这个记录有10个字段,如果我把一条记录插入到数据库中,那么这条记录各个字段都有其值,都有自己应该得到的值,那怕是空值!总之都会有一个值,不会出现这么一种情况。我有三个字段已经赋值了,其他的字段我还没有来的及赋值,或者是出错了,但该记录也被插入进去了。
这其实也就是一个事务,不是所有字段都合法我就不会把这个记录插入到相应的数据表中。
那为什么叫隐式事务呢,因为我们并没有规定什么时候是事务的开始,什么时候是事务的结束。
那么还有一种叫显式事务。显式事务是在程序中用BEGIN TRANSACTION 命令来标识一个事务的开始,用COMMIT TRANSACTION命令标识事务结束;这两个命令之间的所有语句被视为一体。只有执行到COMMIT TRANSACTION命令时,事务中对数据库的更新操作才算确认。和BEGIN。。。。END 命令类似。这两个命令也可以进行嵌套,即事务可以嵌套执行。
通过咱们所介绍的,你也可以看,如何判断一个事务是隐式事务还是显式事务。也就是看一下有没有BEGIN TRANSACTION 语句
还有就是INSERT UPDATEDELETE是系统自带的隐式事务。
如果是显式事务的话,BEGIN TRANSACTION COMMIT TRANSACTION之间的语句要么全部执行要不就一条也不执行。当然,
下面我们来看一下begin transaction的语法:
Begin transaction  transaction_name |@tran_name_var
Commit transaction的语法:
Commit transaction  transaction_name|@tran_name_var
可以用变量来指定事务的名称,只能是字符型。
Begin transaction 可以缩写为  begin tran
Commit transaction 可以缩写为 commit tran  commit
注意:名称,系统只能识别前32个字符!
我们来看一个具体的例子:
这里咱们就把刚才删除后勤部的例子讲一下:
 
declare @transaction_name varchar(32)
set @transaction_name='my_transaction'
begin transaction @transaction_name
delete from 部门表  where 部门编号='1003'
 
delete from 员工表 wher 部门编号='1012'
故意写错一个,如果正确就可以错误!
commit transaction
go
 
select @@error
 
select  * from 部门表
select  * from 员工表
 
我这两条DELETE语句要不同时执行要不就都不执行。如果第一行执行了,第二条还没有执行,突然系统出现故障,那么数据库会回滚到更改之前的状态。
如果不是嵌套的话,事务名称不是必须的。
1001   人事部        1234565
1002   教学部        21323234
1003   后勤部        2323111
1               1001     贾宁                26
2               1002     霍玉娟              24
3               1003     李逍遥              36
4               1002     赵灵儿              32
5               1001     张李                28
6               1002    ABCDEF         25
7               1002     李春明              27
8               1001    aa        NULL  NULL
9               1003     杜飞                29
 



 本文转自 dufei 51CTO博客,原文链接:http://blog.51cto.com/dufei/80769,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
8月前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
5月前
|
SQL Oracle 关系型数据库
[SQL]事务
本文介绍了事务处理的基本概念,包括事务的四大特性(原子性、一致性、隔离性、持久性)及生命周期。文章还详细解释了事务的保存点、四种事务隔离级别及其异常读现象,并提供了设置事务隔离级别的方法。最后,作者建议读者深入学习相关理论以更好地理解事务隔离级别。
102 0
|
7月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
7月前
|
SQL 存储 监控
SQLServer事务复制延迟优化之并行(多线程)复制
【9月更文挑战第12天】在SQL Server中,事务复制延迟会影响数据同步性。并行复制可通过多线程处理优化这一问题,提高复制效率。主要优化方法包括:配置分发代理参数、优化网络带宽、调整系统资源、优化数据库设计及定期监控维护。合理实施这些措施可提升数据同步的及时性和可靠性。
246 0
|
9月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
246 13
|
9月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
152 9
|
9月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
113 6
|
7月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
388 0
|
8月前
|
SQL 监控 供应链
|
9月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
719 1

热门文章

最新文章