【问题标题】:Is there a difference in the way DDLs and DMLs are implemented by a database?数据库实现 DDL 和 DML 的方式有区别吗?
【发布时间】:2011-05-16 12:58:00
【问题描述】:

DDL 和 DML 是用于与数据库交互的两种严格的语句类型。我不确定为什么存在这种分类。

关于 DDL 和 DML 语句,Oracle 数据库在内部的工作方式是否存在根本区别?

【问题讨论】:

    标签: sql database oracle database-design plsql


    【解决方案1】:

    Oracle 中 DDL 和 DML 之间的一个主要(技术)区别是,DDL 不是事务性的,即它们不能回滚并且不需要提交。事实上,Oracle 中的 DDL 在执行之前会进行隐式提交。

    其他数据库(例如 Postgres、DB2)在 DDL 和 DML 之间的事务方面没有区别

    毕竟它只是一个分类,类似于术语“应用程序”和“服务器”(如数据库服务器)。从操作的角度来看,OpenOffice 和 Oracle 都只是简单的“应用程序”,但我们将它们分为不同的类别。

    【讨论】:

    • 注意:在Oracle DDL中是事务性的,但不能参与多语句事务。在执行之前和成功完成执行之后有一个隐式提交。在执行过程中出现错误的情况下,Oracle 可以将不完整的 DDL 回滚,使其具有原子性。
    【解决方案2】:

    DDL 语句用于定义数据库结构、对象和模式,而 DML 语句用于管理模式对象内的数据。归根结底,Oracle(或任何其他数据管理系统)将根据安全权限和对象可用性(即表/视图的锁定和隔离级别)处理每个类型语句。

    此外,架构定义保存在内部主表中,因此您的 DDL 语句实际上会影响存储在这些表中的数据,并且在这个意义上也许可以被视为“主 DML”语句。

    【讨论】:

      【解决方案3】:

      如果您的问题是“是否有理由有必要让 DDL 和 DML 以不同的方式实现”,答案是“否”。

      但是,SQL 语言的定义者选择使 DDL 在语法上与众不同。因此,必须通过适当的 ALTER TABLE 命令向表中添加列。该命令的副作用是在记录所有列的目录表中插入一行。压力副作用

      但是没有根本原因为什么在目录表中插入一行不能触发器本身添加列,因此完全不需要任何“专用 DDL”。

      【讨论】:

        猜你喜欢
        • 2014-01-04
        • 2019-05-06
        • 2011-12-08
        • 2019-03-31
        • 2016-06-18
        • 2011-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多