首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

关于数据库操作回滚的有关问题

2013-01-28 
关于数据库操作回滚的问题? ? ?前些天在Q群里有为群友问有两个对mysql数据库的操作,一个是对某张表的数据

关于数据库操作回滚的问题

? ? ?前些天在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 语句执行后,数据都存在共享池。提供给其他人查询相同的数据时,直接在共享池中提取,不用再去数据库中提取,提高了数据查询的速度。

热点排行