SQL Server——事务

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 那么,你有没有思考过这样一个问题呢?如果这个过程中的某一个步骤错误了,比如,删除了原来信息,但添加时因为某种原因却没有将数据添加进去,这时是不是数据就出现了缺失?那时的你将会惊慌失措,痛恨自己手抖。

相关语法请参考:SQL中的事务问题_吃豆子的恐龙的博客-CSDN博客


什么是事务?


多个用户同时对同一个数据进行修改。要么只更新,要么只添加,要么只删除


假设:我要更新Student表中某一个学生的信息,这个SQL语句执行的过程我们就可以分为两步:


第一步,删除这个学生原来的学籍信息


第二步,把要更新的学籍信息添加进去


那么,你有没有思考过这样一个问题呢?如果这个过程中的某一个步骤错误了,比如,删除了原来信息,但添加时因为某种原因却没有将数据添加进去,这时是不是数据就出现了缺失?那时的你将会惊慌失措,痛恨自己手抖。


这时我们就可以使用事务,必须两个步骤都成功了表才会发生变化,否则就恢复到表原来的状态


事务的特点是什么?


要么都成功,要么都失败


举例


现有一个名为【student】的表,表内没有任何数据,为空


CREATE TABLE [dbo].[student](
  [SId] [int] NULL,
  [Sname] [varchar](10) NULL,
  [Sage] [varchar](10) NULL,
  [Ssex] [varchar](10) NULL,
  [民族] [varchar](50) NULL
)


20200409205939545.png


需求:向表内添加学籍信息


一、当执行的事务中有错误时,返回表的初始状态


begin tran     --开始事务
begin try      
    insert into student values('1','赵四','17','女','汉族')     --正确语句
    insert into student values('aa','赵四','17','女','汉族')    --错误语句
end try
begin catch      --捕捉错误信息
    select Error_line() as ErrorLine,           --产生错误的行号
           Error_message() as ErrorMessage      --错误原因
    if(@@TRANCOUNT>0)                           --全局变量,判断是否开启了事务
    rollback tran         --如果有错误就回滚事务
end catch
if(@@trancount>0)       
commit tran               --提交事务
select * from student     


返回结果:


20200409212059965.png


二、当事务中的语句都正确时,执行成功


begin tran     --开始事务
begin try      
    insert into student values('1','赵四','17','女','汉族')     --正确语句
    insert into student values('2','赵四','17','女','汉族')    --错误语句
end try
begin catch      --捕捉错误信息
    select Error_line() as ErrorLine,           --产生错误的行号
           Error_message() as ErrorMessage      --错误原因
    if(@@TRANCOUNT>0)                           --全局变量,判断是否开启了事务
    rollback tran         --如果有错误就回滚事务
end catch
if(@@trancount>0)       
commit tran               --提交事务
select * from student     


20200409212207666.png


三、设立保存点


作用:相当于备份保存点的数据


begin tran
insert into student values('1','王菲','17','女','汉族')    --正确语句
save tran a_point                                      --保存点a
insert into student values('2','王菲','17','女',null)     
save tran b_point                                      --保存点b
insert into student values('3','王菲','17','女','汉族')    
begin 
  rollback tran a_point     --回滚保存点b
  commit tran
end
select * from student


返回结果:


20200409213328784.png

相关实践学习
使用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
相关文章
|
1月前
|
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事件查看器以获取更多线索。
|
7天前
|
SQL 存储 监控
SQLServer事务复制延迟优化之并行(多线程)复制
【9月更文挑战第12天】在SQL Server中,事务复制延迟会影响数据同步性。并行复制可通过多线程处理优化这一问题,提高复制效率。主要优化方法包括:配置分发代理参数、优化网络带宽、调整系统资源、优化数据库设计及定期监控维护。合理实施这些措施可提升数据同步的及时性和可靠性。
|
17天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
36 0
|
21天前
|
SQL 监控 供应链
|
2月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
63 13
|
2月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
2月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
44 6
|
1月前
|
SQL 数据库连接 网络安全
SQLServer非默认端口下事务复制代理作业服务无法启动的处理
【8月更文挑战第14天】若SQL Server非默认端口下的事务复制代理作业无法启动,可按以下步骤解决:1) 确认服务器连接字符串正确无误,包括非默认端口号;2) 检查防火墙设置,确保允许非默认端口的连接;3) 核实SQL Server配置已启用非默认端口;4) 查阅代理作业日志寻找错误详情;5) 重启SQL Server与Agent服务;6) 使用工具测试非默认端口的连接性。如问题持续,请寻求专业支持。
|
1月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
178 0
|
2月前
|
存储 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) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
107 1