DDL, DML不是所有SQL都是可以自动回滚的

因为DDL没有事务性,所以DDL不能回滚。

要实现自动回滚。(begin,commit,rollback),则SQL语句中只能包括DML。

这样,自动化发布就会受限规范格式。

故而,一刀切的办法是,假定所有SQL不支持事务,自已定义好ROLLBACK的SQL脚本,在出错时能用代码回滚,

而不是依赖于数据库本身的功能。

========================

DDL和DML

DDL (Data Definition Language 数据定义语言)
create table 创建表
alter table  修改表
drop table 删除表
truncate table 删除表中所有行
create index 创建索引
drop index  删除索引
当执行DDL语句时,在每一条语句前后,oracle都将提交当前的事务。如果用户使用insert命令将记录插入到数据库后,执行了一条DDL语句(如create table),此时来自insert命令的数据将被提交到数据库。当DDL语句执行完成时,DDL语句会被自动提交,不能回滚。 
DML (Data Manipulation Language 数据操作语言)
insert 将记录插入到数据库
update 修改数据库的记录
delete 删除数据库的记录
当执行DML命令如果没有提交,将不会被其他会话看到。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动发出commit命令,使未提交的DML命令提交。
时间: 2024-08-03 04:46:27

DDL, DML不是所有SQL都是可以自动回滚的的相关文章

sql server-SQL Server 一条UPDATE执行超时 这时会自动回滚所有已经执行的更行吗

问题描述 SQL Server 一条UPDATE执行超时 这时会自动回滚所有已经执行的更行吗 如题 我误操作执行一条UPDATE执行 后在执行过程中立即关闭了客户端. 因为数据量极大 肯定会超时的 这时会自动回滚所有已经执行的更新吗 没有加上事务语句,但是一条更新语句应该属于SQLServer的隐式事务吧.这个时候会自动回滚吗? 求教各位大神 谢谢大家 解决方案 启动SQL SERVER时自动执行存储过程启动SQL Server时自动执行存储过程sql server 自动执行存储过程 解决方案二

SQL Server中TRUNCATE事务回滚操作方法_mssql2005

我们一般都认为TRUNCATE是一种不可回滚的操作,它会删除表中的所有数据以及重置Identity列. 如果你在事务中进行TRUNCATE操作,就能回滚.反之,它就不会从日志文件文件恢复数据.它不会在日志文件中记录删除的那些数据,它只在日志中记录数据页的单元分配. 下面的例子就能解释上面的所说的.         复制代码 代码如下: USE temp_test_database GO --创建一个临时表 CREATE TABLE TruncateTabel(ID INT) INSERT INT

SQL编程:存储过程+事务处理+回滚+数据迁移

  问题描述: 最近给学校在做一个.NET网站,名字叫做文正学院过程化成绩录入系统,其中需要用到老用户登陆系统需要从旧系统里将以前存在的数据导入到新数据表中, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 USE [new_wzjw] GO /****** Object:  StoredProcedure [dbo].[成绩管理_过程化成绩录入_数据迁移]    S

sql事务(Transaction)用法介绍及回滚实例

当对多个表进行更新的时候,某条执行失败.为了保持数据的完整性,需要使用事务回滚. 显示设置事务  代码如下 复制代码 begin try begin transaction insert into shiwu (asd) values ('aasdasda'); commit transaction end try begin catch select ERROR_NUMBER() as errornumber rollback transaction end catch 隐式设置事务  代码如

数据库必会必知 之 SQL四种语言:DDL DML DCL TCL

今天群里面讨论,DDL 还是 DML,我这种小白还是总结下他们的区别吧. 1. DDL – Data Definition Language 数据库定义语言:定义数据库的结构. 其主要命令有CREATE,ALTER,DROP等,下面用例子详解.该语言不需要commit,因此慎重. CREATE – to create objects in the database   在数据库创建对象 例:CREATE DATABASE test; // 创建一个名为test的数据库 ALTER – alter

SQL四种语言:DDL,DML,DCL,TCL

1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema. DDL是SQL语言的四大功能之一. 用于定义数据库的三级结构,包括外模式.概念模式.内模式及其相互之间的映像,定义数据的完整性.安全控制等约束 DDL不需要commit. CREATE ALTER DROP TRUNCATE COMMENT RENAME 2.DML(Data Manipulat

详解SQL四种语言:DDL DML DCL TCL_Mysql

看到很多人讨论SQL还分为四种类型,在这里知识普及一下,并总结下他们的区别吧. 1. DDL – Data Definition Language 数据库定义语言:定义数据库的结构. 其主要命令有CREATE,ALTER,DROP等,下面用例子详解.该语言不需要commit,因此慎重. CREATE – to create objects in the database   在数据库创建对象 例: CREATE DATABASE test; // 创建一个名为test的数据库 ALTER – a

DDL,DML操作对结果缓存的影响

一 DDL 语句对结果缓存的影响. 清理实验环境,使用hint构造结果缓存,cache_id 为93qg9pxgyrhd35bxgp9ay1mvqw.yang@rac1>exec dbms_result_cache.flush(); PL/SQL 过程已成功完成. 已用时间:  00: 00: 00.00yang@rac1>set autotrace onyang@rac1>select /*+ result_cache */ object_type,count(*) from yang

oracle的DDL语句为什么不能回滚

在ITPUB上看到有人提出了这个问题.在Sqlserver或一些其他的数据库中,DDL语句也是可以回滚的,那么Oracle为什么不能回滚DDL语句呢. 要说明这个问题,首先需要说明什么是DDL语句.DDL语句是数据定义语句,包括各种数据对象的创建.修改和删除,以及授权等操作. 在Oracle中DDL语句将转化为修改数据字典表的DML语句.一个简单的修改表的DDL语句,会导致Oracle在后台通过递归SQL语句进行大量的查询和修改的操作. 如果有兴趣,可以通过SQL_TRACE根据一下DDL语句,