当前位置:首页 » 编程语言 » sql事务怎么写
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql事务怎么写

发布时间: 2022-11-23 04:40:32

sql 中 事务是用来干嘛的 到底应该怎么写语句

SQL事务主要应用于保证多个表
数据更新
的一致性。如很多场合,要求一个表中更新或插入一条数据,另一个表也要更新或插入数据。要么都做,要么都不做,不能出现不一致的情况。例如从ATM中取钱需要以下几个步骤:输入一个PIN号码,选择一个帐户类型和输入你想要提取的资金的金额。如果你试图从ATM中取出50元,然后操作失败,你肯定不愿意在没有拿到钱的情况下被扣除50元。事务就可以被用来保证这种一致性。

⑵ 在SQL中怎样使用事务

SQL Server 需要显示的定义 开始一个事务.
BEGIN TRANSACTION;

例如:
1> BEGIN TRY
2> -- SQL Server 需要显示的定义 开始一个事务.
3> BEGIN TRANSACTION;
4> -- 插入2条同样的数据,使主键重复,引发错误后回滚事务.
5> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
6> INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
7> -- 执行成功后,需要提交事务.
8> COMMIT;
9> END TRY
10> BEGIN CATCH
11> PRINT('Main.错误代码 = ' + STR(ERROR_NUMBER()));
12> PRINT('Main.错误严重级别 = ' + STR(ERROR_SEVERITY()));
13> PRINT('Main.错误状态代码 = ' + STR(ERROR_STATE()));
14> PRINT('Main.错误信息 = ' + ERROR_MESSAGE());
15> -- 回滚事务
16> ROLLBACK;
17> END CATCH
18>
19> go

⑶ 在VB中,怎样对SQL进行事务处理

事务处理是在数据处理时经常遇到的问题,经常用到的方法有以下3种总结整理如下:

方法1:直接写入到sql中

存储过程中使用BEGINTRANS,COMMITTRANS,ROLLBACKTRANS实现

begintrans

declare@orderDetailsErrorint,@procuntErrorint

deletefrom[orderdetails]whereproctid=42

select@orderDetailsError=@@error

deletefromproctswhereproctid=42

select@procuntError=@@error

if(@orderDetailsError=0and@procuntError=0)

COMMITTRANS

else

ROLLBACKTRANS

优点:

所有事务逻辑包含在一个单独的调用中

拥有运行一个事务的最佳性能

独立于应用程序

限制:

事务上下文仅存在于数据库调用中

数据库代码与数据库系统有关


方法2:使用ADO.NET实现

使用ADO.NET实现,使用这种方式的优点是可以在中间层来管理事务,当然你也可以选择在数据层来实现。

SqlConnection和OleDbConnection对象有一个BeginTransaction方法,它可以返回SqlTransaction

或者OleDbTransaction对象。而且这个对象有Commit和Rollback方法来管理事务

SqlConnectionsqlConnection=newSqlConnection("workstationid=WEIXIAOPING;packetsize=4096;userid=sa;initialcatalog=Northwind;persistsecurityinfo=False");

sqlConnection.Open();

SqlTransactionmyTrans=sqlConnection.BeginTransaction();

SqlCommandsqlInsertCommand=newSqlCommand();

sqlInsertCommand.Connection=sqlConnection

sqlInsertCommand.Transaction=myTrans;

try{

sqlInsertCommand.CommandText="insertintotbTree(Context,ParentID)values('北京',1)";

sqlInsertCommand.ExecuteNonQuery();

sqlInsertCommand.CommandText="insertintotbTree(Context,ParentID)values('上海',1)";

sqlInsertCommand.ExecuteNonQuery();

myTrans.Commit();

}catch(Exceptionex)

{

myTrans.Rollback();

}

finally

{

sqlConnection.Close();

}

优点:

简单性

和数据据事务差不多的快

独立于数据库,不同数据库的专有代码被隐藏了

缺点:

事务不能跨越多个数据库连接

事务执行在数据库连接层上,所以需要在事务过程中维护一个数据库连接

ADO.NET分布事务也可以跨越多个数据库,但是其中一个SQLSERVER数据库的话,通过用SQLSERVER连接服务器连接到别的数据库,但是如果是在DB2和Orcal之间就不可以。

以上两种事务是经常用到的事务处理方法。


方法3COM+事务(分布式事务)

.NETFramework依靠MTS/COM+服务来支持自动事务。COM+使用(DTC)作为事务管理器和事务协调器在分布式环境中运行事务。

这样可使.NET应用程序运行跨多个资源结合不同操作(例如,将定单插入SQLServer数据库、将消息写入Microsoft消息队列(MSMQ)队列、以及从Oracle数据库检索数据)

的事务。

COM+事务处理的类必须继承System.EnterpriseServices.ServicedComponent,其实webservice就是继承System.EnterpriseServices.ServicedComponent,所以webservice也支持

COM+事务。

定义一个COM+事务处理的类

[Transaction(TransactionOption.Required)]

publicclassDataAccess:System.EnterpriseServices.ServicedComponent

{

}

TransactionOption枚举类型支持5个COM+值(Disabled,NotSupported,Required,RequiresNew,Supported)

Disabled忽略当前上下文中的任何事务。

NotSupported使用非受控事务在上下文中创建组件。

Required如果事务存在则共享事务,并且如有必要则创建新事务。

RequiresNew使用新事务创建组件,而与当前上下文的状态无关。

Supported如果事务存在,则共享该事务。

一般来说COM+中的组件需要Required或Supported。当组件用于记录或查帐时RequiresNew很有用,因为组件应该与活动中其他事务处理的提交或回滚隔离开来。

派生类可以重载基类的任意属性。如DataAccess选用Required,派生类仍然可以重载并指定RequiresNew或其他值。

COM+事务有手动处理和自动处理,自动处理就是在所需要自动处理的方法前加上[AutoComplete],根据方法的正常或抛出异常决定提交或回滚。

手动处理就是调用ContextUtil类中EnableCommit,SetComplete,SetAbort方法。

publicstringtestTransaction()

{

try

{

ContextUtil.EnableCommit();

InsertARecord1();

InsertARecord2();

ContextUtil.SetComplete();

return"succeed!";

}

catch(Exceptionex)

{

ContextUtil.SetAbort();

return"failed!";

}

}

publicvoidInsertARecord1()

{

stringstrconn="workstationid=WEIXIAOPING;packetsize=4096;userid=sa;initialcatalog=Northwind;persistsecurityinfo=False";

SqlConnectionconn=newSqlConnection(strconn);

conn.Open();

SqlCommandcommand=newSqlCommand("insertintotbTree(Context,ParentID)values('北京',1)",conn);

command.ExecuteNonQuery();

conn.Close();

}

publicvoidInsertARecord2()

{

stringstrconn="workstationid=WEIXIAOPING;packetsize=4096;userid=sa;initialcatalog=Northwind;persistsecurityinfo=False";

SqlConnectionconn=newSqlConnection(strconn);

conn.Open();

SqlCommandcommand=newSqlCommand("insertintotbTree(Context,ParentID)values('上海',1)",conn);

command.ExecuteNonQuery();

conn.Close();

}

在需要事务跨MSMQ和其他可识别事务的资源(例如,SQLServer数据库)运行的系统中,只能使用DTC或COM+事务,除此之外没有其他选择。DTC协调参与分布式事务的所有资源管理器, 也管理与事务相关的操作。

这种做法的缺点是,由于存在DTC和COM互操作性开销,导致性能降低。

COM+事务处理的类必须强命名。

⑷ SQL事务概念是什么,举个例子说明什么样的东西是事务,与程序又有何区别,

数据库事务是构成单一逻辑工作单元的操作集合。

举例:转账是生活中常见的操作,比如从A账户转账100元到B账号。站在用户角度而言,这是一个逻辑上的单一操作,然而在数据库系统中,至少会分成两个步骤来完成:

1、将A账户的金额减少100元

2、将B账户的金额增加100元。

与程序的区别:一个程序中包含多个事务。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

(4)sql事务怎么写扩展阅读:

事务必须具备四个属性,简称ACID属性:

1、原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。

2、一致性(Consistency):当事务完成时,数据必须处于一致状态。

3、隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。

4、永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。