日期:2014-05-16  浏览次数:20393 次

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

? ? ?前些天在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??