Oracle中DDL语句对事务的影响

本文详细对比了Oracle和SQL Server在执行DDL语句时对事务的不同影响,通过具体例子展示了在不同数据库管理系统中DDL语句如何在事务中执行,以及其可能产生的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



1.Oracle中DDL语句对事务的影响

  在Oracle中,执行DDL语句(如Create Table、Create View等)时,会在执行之前自动发出一个Commit命令,并在随后发出一个Commit或者Rollback命令,也就是说,DDL会象如下伪码一样执行:

  Commit;DDL_Statement;

  If (Error) then

  Rollback;

  Else

  Commit;End if;

  我们通过分析下面例子来看Oracle中,DDL语句对事务的影响:

  Insert into some_table values(‘Before’);Creaate table T(x int);

  Insert into some_table values(‘After’);Rollback;

  由于在Oracle执行Create table语句之前进行了提交,而在Create table执行后也会自动发出Commit命令,所以只有插入After的行被回滚,而插入Before的行不会被回滚,Create table命令的结果也不会被回滚,即使Create table语句失败,所进行的Before插入也会被提交。如果最后发出Commit命令,因为插入Before及Create table的操作结果已经在之前提交,所以Commit命令影响的只有插入After的操作。

  2.SQL Server中DDL语句对事务的影响

  在SQL Server中,DDL语句对事务的影响与其他DML语句相同,也就是说,在DML语句发出之前或之后,都不会自动发出Commit命令。

  在SQL Server 2000中,对于与上面Oracle同样的例子,最后发出Rollback后,数据库会回滚到插入Before之前的状态,即插入Before和After的行都会被回滚,数据表T也不会被创建。

  如果最后发出Commit操作,则会把三个操作的结果全部提交。

参考:http://www.233.com/oracle/zonghe/20101008/103744390.html
http://blog.youkuaiyun.com/fw0124/article/details/6227376

### Oracle 数据库中的 DDL 语句概述 在 Oracle 数据库中,DDL(Data Definition Language)语句主要用于创建、修改和删除数据库对象,如表、索引、视图、约束等。以下是关于如何使用 DDL 语句的具体示例及其功能说明。 --- #### 创建表 (CREATE TABLE) 通过 `CREATE TABLE` 语句可以定义一个新的数据表并指定其列名、数据类型和其他属性。例如: ```sql CREATE TABLE employees ( employee_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50) NOT NULL, email VARCHAR2(100) UNIQUE, hire_date DATE DEFAULT SYSDATE, salary NUMBER(8, 2) ); ``` 上述代码片段展示了如何创建一个名为 `employees` 的表,并为其定义了几种类型的字段以及一些常见的约束条件[^1]。 --- #### 修改现有表结构 (ALTER TABLE) 当需要调整已存在的表时,可利用 `ALTER TABLE` 命令添加新列、更改已有列或者增加/移除某些约束条件。下面是一些典型操作的例子: - **向表中新增一列** ```sql ALTER TABLE employees ADD department_id NUMBER; ``` - **重命名某列名称** ```sql ALTER TABLE employees RENAME COLUMN department TO deptartment_newname; ``` - **设置默认值给特定列** ```sql ALTER TABLE employees MODIFY salary NUMBER(9, 2) DEFAULT 5000; ``` 这些命令允许灵活地更新现有的表格设计以满足新的业务需求。 --- #### 删除整个表 (DROP TABLE) 如果不再需要某个表,则可以通过简单的 `DROP TABLE` 操作将其彻底清除掉连同里面所有的记录一起消失不见: ```sql DROP TABLE employees CASCADE CONSTRAINTS; ``` 这里附加了选项 `CASCADE CONSTRAINTS`, 它的作用是用来自动处理那些依赖于被删去实体上的外键关系等问题. 需要注意的是,在执行任何 DDL 类型的操作之前都应该考虑到它们会对当前事务状态造成的影响——因为每次成功完成这样的变更之后都会触发一次隐含提交行为从而无法再回滚先前未保存的变化[^2]. --- #### 复制表结构而不复制数据 有时候我们只想获取源表的设计蓝图而不是实际内容项本身;这时就可以采用如下技巧实现仅拷贝架构的目的: ```sql CREATE TABLE new_employees AS SELECT * FROM employees WHERE 1=2; ``` 在这个例子当中由于WHERE子句里的逻辑表达永远为假所以最终得到的结果集为空集合因此也就实现了单纯迁移框架的效果[^3]. --- ### 总结 综上所述,Oracle 中的 DDL 提供了一套强大且丰富的工具帮助开发者高效构建与维护复杂的关系型数据库环境。无论是初期规划阶段还是后期优化改进过程中都离不开这类基础建设性的语法支持. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值