Tag: 事务

如果不在数据库中提交事务会发生什么情况(比如说SQL Server)

假设我有一个查询: begin tran — some other sql code 然后我忘记提交或回滚。 如果另一个真正的客户端试图执行查询,会发生什么?

我应该提交还是回滚读取事务?

我有一个读取查询,我在一个事务中执行,以便我可以指定隔离级别。 一旦查询完成,我该怎么办? 提交交易 回滚事务 什么都不做(这将导致事务在使用块的末尾回滚) 什么是做每个的影响? using (IDbConnection connection = ConnectionFactory.CreateConnection()) { using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted)) { using (IDbCommand command = connection.CreateCommand()) { command.Transaction = transaction; command.CommandText = "SELECT * FROM SomeTable"; using (IDataReader reader = command.ExecuteReader()) { // Read the results } } // To commit, or not to commit? } } 编辑:问题是,如果一个交易应该使用,或者如果有其他的方式来设置交易水平。 […]

如果发生错误,使用语句会回滚数据库事务吗?

我在using语句中有一个IDbTransaction,但是我不确定在using语句中是否抛出exception,是否会回滚。 我知道一个使用语句将强制执行Dispose()的调用…但是有谁知道对于Rollback()是否也是如此? 更新:另外,我是否需要显式调用Commit(),如下所示,或者这也将由using语句来处理? 我的代码看起来像这样: using Microsoft.Practices.EnterpriseLibrary.Data; … using(IDbConnection connection = DatabaseInstance.CreateConnection()) { connection.Open(); using(IDbTransaction transaction = connection.BeginTransaction()) { //Attempt to do stuff in the database //potentially throw an exception transaction.Commit(); } }

什么是数据库事务?

有人可以提供一个简单的(但不是简单的)交易的解释,适用于计算(即使从维基百科复制)?

何时使用SELECT … FOR UPDATE?

请帮我理解SELECT … FOR UPDATE的用例。 问题1 :下面是SELECT … FOR UPDATE一个很好的例子吗? 鉴于: 客房[ID] 标签[id,name] room_tags [room_id,tag_id] room_id和tag_id是外键 应用程序想要列出所有房间及其标签,但需要区分没有标签的房间和已被移除的房间。 如果不使用SELECT … FOR UPDATE,会发生什么情况是: 原来: 房间包含[id = 1] 标签包含[id = 1, name = 'cats'] room_tags包含[room_id = 1, tag_id = 1] 主题1: SELECT id FROM rooms; returns [id = 1] 线程2: DELETE FROM room_tags WHERE room_id = 1; 线程2: DELETE […]

有没有办法在SQL Server 2000数据库上列出打开的事务?

有谁知道任何方式列出SQL Server 2000数据库上的打开事务? 我知道我可以在SQL 2005(和更高版本)数据库版本上查询sys.dm_tran_session_transactions ,但是这在SQL 2000上是不可用的。

修复“锁超时超时; 尝试重新启动事务“为”卡住“的Mysql表?

从脚本中,我发送了一个这样的数千次的查询到我的本地数据库: update some_table set some_column = some_value 我忘了添加where部分,所以同一个列被设置为表中所有行的相同值,并且这已经完成了数千次,并且列被索引,所以相应的索引可能会更新太多次。 我注意到有什么不对,因为它花了太长时间,所以我杀死了剧本。 我甚至从那以后重新启动了我的电脑,但是有些东西卡在表中,因为简单的查询需要很长时间才能运行,而当我尝试删除相关的索引时,它会失败,并显示以下消息: Lock wait timeout exceeded; try restarting transaction 这是一个innodb表,所以卡住的交易可能是隐含的。 我怎样才能解决这个表,并从中删除卡住的交易?

TransactionScope如何回滚事务?

我正在写一个集成testing,我将插入一些对象到数据库,然后检查,以确保我的方法是否检索这些对象。 我的数据库的连接是通过NHibernate的……我创build这样一个testing通常的方法是做到以下几点: NHibernateSession.BeginTransaction(); //use nhibernate to insert objects into database //retrieve objects via my method //verify actual objects returned are the same as those inserted NHibernateSession.RollbackTransaction(); 不过,我最近发现了一些显然可以用于这个目的的TransactionScope 。 我find的一些示例代码如下所示: public static int AddDepartmentWithEmployees(Department dept) { int res = 0; DepartmentAdapter deptAdapter = new DepartmentAdapter(); EmployeeAdapter empAdapter = new EmployeeAdapter(); using (TransactionScope txScope = new TransactionScope()) […]

在MS SQL Server Management Studio中处理事务的最佳方式

比方说,我有一个SQL语句在语法和语义上是正确的,所以它执行。 在Management Studio(或任何其他查询工具)中,如何testingSQL语句,如果我注意到他们打破了某些内容,则回滚(在单独的查询中)?

正确使用SQL Server 2008中的事务

我有2个命令,需要他们都正确执行或没有执行。 所以我想我需要一个交易,但我不知道如何正确使用它。 以下脚本有什么问题? BEGIN TRANSACTION [Tran1] INSERT INTO [Test].[dbo].[T1] ([Title], [AVG]) VALUES ('Tidd130', 130), ('Tidd230', 230) UPDATE [Test].[dbo].[T1] SET [Title] = N'az2' ,[AVG] = 1 WHERE [dbo].[T1].[Title] = N'az' COMMIT TRANSACTION [Tran1] GO insert命令执行但update命令有问题。 我怎样才能实现这个回滚两个命令,如果他们有任何执行错误?