数据库事务

数据库事务

数据库事务定义

事物:是有一系列的逻辑语句组成的工作单元,事物保证这一系列语句要么成功执行所有语句,要么都不执行。

数据库事物语法

  1. 开启事物 begin transaction
  2. 结束事物
  • 提交事物:事物执行成功的时候commit提交事物
  • 事物回滚:事物执行失败时rollback回滚到事物执行前或事物所设置的某个保存点

例子

创建学生表

CREATE TABLE [dbo].[Student](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Number] [nvarchar](50) NULL,
    [Name] [nchar](10) NULL,
    [Age] [int] NULL
) 

事物插入两条数据,第二条为非法数据。执行结果两条数据都未插入。执行语句

declare @ErrorCount int =0;
begin transaction
insert into Student([Number] ,[Name],[Age])values('0521','jerry',5);
set @ErrorCount = @ErrorCount + @@ERROR
insert into Student([Number] ,[Name],[Age])values('0521','jerry','hello');
set @ErrorCount = @ErrorCount + @@ERROR
if @ErrorCount=0
begin
commit
end
else
begin
rollback
end

事物简单写法

一大部分书籍或博客都是如上写事物,执行成功commit失败rollback。其感觉好没有必要(认为在没有设回滚点时,
没必要用rollback),事务已经保证了逻辑单元,之前提交同样可以。

begin transaction
insert into Student([Number] ,[Name],[Age])values('0521','jerry',5);
insert into Student([Number] ,[Name],[Age])values('0521','jerry','hello');
commit

ADO.Net中应用

在ado.net 中感觉完全没有必要通过try{}catch(){}事物回滚。

var conn = System.Configuration.ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
string SQL1 = "insert into Student([Number] ,[Name],[Age])values('0521','jerry',5) ";
string SQL2 = "insert into Student([Number] ,[Name],[Age])values('0521','jerry','hello')";

using (SqlConnection connection = new SqlConnection(conn))
{
    connection.Open();
    SqlTransaction sqlTran = connection.BeginTransaction();
    SqlCommand command = connection.CreateCommand();
    command.Transaction = sqlTran;

    try
    {
        command.CommandText = SQL1;
        int rowsAffected = command.ExecuteNonQuery();
        command.CommandText = SQL2;
        rowsAffected += command.ExecuteNonQuery();
        transaction.Commit();
    }
    catch (Exception ex1)
    {
        //认为没有必要写Rollback
        //transaction.Rollback();
    }
}

不知观点是否正确,欢迎其他观点讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 链接 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都...
    yangqi916阅读 3,142评论 0 0
  • 1、写在前面 1.1 为什么要并发控制 如果事务在并发执行时,来自各个并发事务的所有指令的执行控制都是由操作系统负...
    SpaceCat阅读 13,343评论 0 7
  • 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。 为确保数据库中数据的一致性,数据的操...
    怪蜀黍Zzzzlw阅读 3,106评论 0 0
  • 原文链接: java中数据库事务嵌套与mysql事务隔离级别 今天在java代码中遇到一个数据库相关的bug,在分...
    rainybowe阅读 8,014评论 2 11
  • 《陌生的女儿》初看书名,会以为是一个青春期的孩子与父母之间不断碰撞,最终彼此获得谅解的书。看完后却觉别有洞天...
    夏筠若阅读 6,504评论 0 1

友情链接更多精彩内容