前些天在Q群里有为群友问有两个对mysql数据库的操作,一个是对某张表的数据进行删除,另一个是对另一张表的删除,两个操作加入到同一事务中,如果数据删除这步出错,事务是否会回滚?即对于表的删除会不会失效?
我当时对这个问题不是很确定,只知道DML会回滚,DDL不确定。自己编写了个小实例验证了下,结果显示:对于表的删除操作(DDL),事务不会回滚。
查了下资料,现有如下总结:
DDL:数据库定义语言,如DROP、ALTER、CREATE等等。
DML:数据库操纵语言,SQL中处理数据等操作统称为数据操纵语言。如SELECT、SAVE、DELETE、 UPDATE等。
DCL:数据控制语言,用来授予或回收访问数据库的某种特权,并控制 数据库操纵事务发生的时间及效果,对数据库实行监视等。如GRANT,COMMIT,ROLLBACK等。
因为不同的操作隐含着不同的数据提交方式,下面说一下提交数据的方式:
①显式提交:用 COMMIT 命令直接完成的提交为显式提交。
②隐式提交: 用 SQL 命令间接完成的提交为隐式提交。以下命令都是隐性提交的: ALTER , AUDIT , COMMENT , CONNECT , CREATE , DISCONNECT , DROP , EXIT , GRANT ,NOAUDIT , QUIT , REVOKE , RENAME 。
③自动提交:若把 AUTOCOMMIT 设置为 ON ,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。
所有的 DML 语句都是要显式提交的,即要在执行完DML语句之后,执行 COMMIT 。而其他的诸如 DDL 语句的,都是隐式提交的。也就是说,在运行那些非 DML 语句后,数据库已经进行了隐式提交,例如 CREATE TABLE,在运行脚本后,表已经建好了,并不在需要你再进行显式提交。所以非DML操作是不能回滚的。
DML 语句,执行完之后,要处理的数据都会放在回滚段中(除了 SELECT 语句),等待用户进行提交(COMMIT)或者回滚 (ROLLBACK),当用户执行 COMMIT / ROLLBACK后,放在回滚段中的数据就会被删除。OMMIT / ROLLBACK 都是用在执行 DML语句之后的。这也就是为什么DML语句可以回滚的原因了。而SELECT 语句执行后,数据都存在共享池。提供给其他人查询相同的数据时,直接在共享池中提取,不用再去数据库中提取,提高了数据查询的速度。
相关推荐
java 应用程序操作数据库实例,若出现sql异常则事务回滚。
主要是在实际开发中运用到对数据库的操作同步进行,几个操作相关性的问题。 回滚了就说明事务有个判断,阻止SQL的自动提交,添加认为控制
本文简要阐述了新建Oracle数据库回滚段具体操作过程,并且介绍了具体的操作过程和步骤。
源码通过创建ADODB.Connection对象实现了ADODB数据库操作。@易语言源码。
数据库试验,关于事务的操作。关于事务的创建撤销,事务的回滚等基本操作练习。
主要介绍了MySQL数据库误操作后快速回滚的方法的相关资料,需要的朋友可以参考下
一个比较简单实用的数据库操作实例,事务处理。从数据库的开始事务,保存事务和回滚事务,。使用方法:。在操作数据库前,建立一个开始事务,。在操作数据库最容易出错的地方,加上判断,如果成功,就不用回滚了,如果失败则...
跨多个数据库操作,同时连接两个一上的数据库,用事物关联起来,JTA,两个一上数据库连接,连接两个数据库,两个数据库可以同时操作,同时回滚。。。。同时提交。。
c#对2个表中的数据同时进行操作,数据错误,数据回滚 即对table1插入数据对table2插入数据 如果对table2操作出现错误 那么对table1已做的操作要回滚(放弃)
MySQL数据库操作MFC封装类,增加了事务处理及回滚。在实际项目使用。CSQLConnection封装数据库的连接,CSQLResult封装记录集的操作。
如果任何类似的事务的已经在数据库中反映,这一定是颠倒的,并且数据库必须回滚。 使用这种日志重新应用的技术,数据库系统可以避免宕机所带来的已接受事务(应用已确认执行完毕的事务)的丢失。数据修复时,那些在...
保证数据的安全性是DBA第一要务: (0)理论上可以恢复+跑路; (1)全量备份+增量备份+定期演练; (2)1小时延时从库; (3)双份1小时延时从库+提高资源利用率;
执行多条SQL语句对数据库进行操作,如果某个SQL语句执行中出错,那么要对之前的操作进行回滚,代码比较简单。
spring 事务回滚 1、遇到的问题 当我们一个方法里面有多个数据库保存操作的时候... 正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败。这样子应该都不是我们要的
花了一晚上时间终于搞出来了Spring整合Mybatis事务回滚(Mysql数据库),控制Service层中的多次插入操作,多次操作整体是一个事务。 里面有缘嘛和jar包,资源为war包,导入即可。运行Test类中的测试代码即可。 建表...
易语言数据库操作支持类模块源码,数据库操作支持类模块,连接,连接Access,连接SQLServer,关闭,执行SQL,取得权限,设置权限,设超时时间,取超时时间,开始事务,保存事务,回滚事务,最后错误,是否已连接,对象提供者,引擎...
数据库回滚段配置 10 1.2.11. 数据库临时段表空间配置 11 1.2.12. 数据库系统表空间配置 11 1.3. 数据库表空间设计原则 11 1.3.1. 表空间大小定义原则 11 1.3.2. 表空间扩展性设计原则 12 1.4. 裸设备的使用 12 2. ...
①数据库操作中间件: 提供数据库连接接口。该接口可使“数据库操作中间件”连接当前主流的数据库,如Oracle、SQLServer、MySQL、Access 等;参数要求:指示数据库类型,数据库相应的连接参数。 提供关闭数据库连接...