最近在做的一个小项目,用到了MySql数据库,以前都没涉及到这方面,所以还是按照了其他数据库的思维来用MySql。可是在做事物的rollback的时候却怎么也不成功。查找了MySql的相关资料才了解到MySql的事务处理和其他数据库还是有区别的。
首先,你在创建MySql数据库表的时候,一定要选择他的引擎为INNODB和BDB类型。只有这两种类型支持事物处理。你可以通过show variables like "have_%"命令查看一下当前的INNODB信息,如果have_innodb一项为YES则,当前数据表支持事物处理。
其次,MySql的事物处理时有两种的。以前我认为数据库用到回滚时,只有设置autocommit,但在MySql里还有别的方式。MySql的事物处理有两种方式:
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
例子:(第一种方法)
MySqlTransaction tx = con.BeginTransaction();
MySqlCommand cmd = new MySqlCommand("set names gb2312", con);
cmd.Transaction = tx;
cmd.ExecuteNonQuery();
try
{
for (int i = 0; i < sqlList.Count; i++)
{
string strsql = sqlList[i].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
//提交所做的Sql操作
tx.Commit();
flag = true;
}
catch (Exception ex)
{
tx.Rollback();
LogManager.WriteLog(LogFile.Error, ex.Message);
}
相关推荐
在MySQL中,事务的实现依赖于其强大的事务日志系统,而组提交(group commit)技术则是提高事务处理性能的关键技术之一。下面将详细解读MySQL事务实现原理之组提交的核心知识点。 首先,了解什么是WAL(Write-Ahead...
JAVA设置手动提交事务、回滚事务、提交事务的操作详解 本文主要介绍了JAVA设置手动提交事务、回滚事务、提交事务的操作,涉及到事务的自动提交、手动提交、回滚和提交等操作。以下是对这些操作的详细解释和示例代码...
关于mysql的事务处理 public static void StartTransaction(Connection con, String[] sqls) throws Exception { if (sqls == null) { return; } Statement sm = null; try { // 事务开始 System....
本篇将深入探讨JDBC API中关于事务的提交和回滚的细节。 在默认情况下,JDBC连接处于自动提交模式,这意味着每执行一个SQL语句,如果执行成功,该操作就会立即提交到数据库。这种模式适合于简单的应用,但在以下几...
consistency(一致性)表示一个事物内有一个操作失败时,所有更改过的数据都必须回滚到修改前的状态。这确保了数据的一致性。 isolation(隔离性)事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的...
MySQL 事务管理是数据库操作的重要组成部分,特别是在处理关键数据和多步骤操作时,确保数据的一致性和完整性至关重要。事务提供了原子性、一致性、隔离性和持久性的保障,这四个特性通常被简称为ACID属性。 原子性...
该接口提供了关于当前事务的状态信息,如是否已提交、是否已回滚等。 #### 基于XML声明式事务控制 通过配置文件来定义事务规则。例如,在转账案例中,可以配置如下: ```xml (* ...
### MySQL索引、锁与事务详解 ...综上所述,MySQL中的索引、锁与事务是保证数据一致性、提升查询效率和处理并发操作的关键技术。正确理解和运用这些技术可以帮助我们构建更加稳定和高效的数据库系统。
其次, Consistency保证事务中的每个操作线程不可单独提交,成功则一起提交,不成功则事务回滚。确保事务的执行结果是一致的。 接着, Isolation保证不同事务间看到的数据视图相互独立,相互隔离。 MySQL中有四种...
- 如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择 - 如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率 - 如果只是临时存放数据,...
在事务管理方面,MySQL支持四种隔离级别:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别决定了事务看到的数据版本以及可能出现...
例如,将`saveSignInfo`方法标记为`@Transactional`,Spring会自动处理事务的开始、提交或回滚,根据异常情况决定是否回滚事务。 ```java @Service public class SignServiceImpl implements ISignService { @...
- Service层对象中,使用`@Transactional`注解标记事务边界,Spring会自动管理事务的开启、提交或回滚。 - DAO层(iBatis)负责具体的数据库操作,通过`SqlMapClient`执行SQL语句。 7. **优点** - Struts提供了...
使用事务时要处理好事务提交或回滚的情况,确保数据的完整性。 文章的最后部分因为OCR扫描技术原因存在一些错误,但可以推测最后一部分可能是在强调异常处理的重要性,以及在实际部署时对错误日志的记录和分析,...
总的来说,mysqli扩展提供了更安全、更灵活的方式来处理MySQL的事务,包括开始、提交、回滚事务以及控制自动提交状态。理解并正确使用这些功能,对于编写健壮的、事务安全的PHP应用程序至关重要。在实际开发中,应该...
以下只是展示如何应用,具体用的时候要加上判断,如果都执行成功则提交,否则回滚 看前先分清mysqli与mysql扩展是不一样的 mysqli扩展处理事物: $mysqli=new mysqli('localhost','root','123456','test'); $mysqli...
事务处理了数据库中的多条SQL语句作为一个整体,要么全部执行,要么全部回滚。 在MySQL中,事务有两种类型:显式事务和隐式事务。隐式事务是默认的,即当执行如INSERT、UPDATE或DELETE等DML语句时,MySQL会自动开启...
在MySQL中,事务主要用于InnoDB存储引擎,因为它提供了事务处理所需的功能。 事务的基本概念: 1. 原子性(Atomicity):事务中的每个操作要么全部完成,要么全部不完成,不会停留在中间状态。 2. 一致性...
在`finally`块中,通常会检查是否需要提交或回滚事务。 7. **事务隔离级别**:JDBC定义了四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化...
此外,还有一些特殊的处理,如SAVEPOINT允许在事务中设置多个恢复点,方便部分回滚。 在源码层面,数据库管理系统通常会实现复杂的并发控制算法,如两阶段锁(2PL)、多版本并发控制(MVCC)等,来保证事务的正确...