了解 DELETE 和 DROP 命令

Understanding DELETE and DROP command

我是计算机科学专业的学生。最近想学数据库。我发现 link 描述了 DELETE 和 DROP 命令之间的区别。我了解它们与最重要的一个之间的大部分区别 - DELETE 仅删除 DROP 也删除 table/object 的数据。

但我无法理解一个区别 - DELETE 命令会触发 DML 触发器,而 DROP 不会触发任何 DML 触发器。 link 只是陈述这个事实,没有任何解释。谁能解释一下,让我更明白。

DELETE 保留 table 但删除其中的部分或全部行。 DROP 删除 table 及其所有数据,因此 table 不再存在。

DROP 删除 table 以及数据和其他结构,例如约束、索引、授权和触发器。所以触发器不会触发,因为在处理过程中它也被删除了。

"DELETE command fire a DML trigger where DROP doesn't fire any DML trigger"'

在 Oracle 和其他一些数据库中提供了触发器。触发器注意到但子例程将在 DML 操作上执行,如插入、更新、删除 .. 比如说更新 table 中的某些行,可以调用触发器。

同样在执行delete语句的时候,可以执行一个触发器。要获得更多理解,请通读触发器。

delete and name explains 将删除 table 中的全部或部分行,具体取决于您的规范和要求, 其中 as drop 将从架构中删除 table。

至于触发器,这里有一个例子。(它们只在 dmls 上触发,不在 ddls 上触发,) 我有一个名为 testmp2 的 table,它包含员工详细信息和另一个 table testdelvalues,它仅用于存储已删除员工记录的详细信息。

这是我正在使用的示例触发器。

SQL> CREATE OR REPLACE TRIGGER testempdel
  2  AFTER delete ON testemp2
  3   FOR EACH ROW
  4  BEGIN
  5      INSERT INTO testdelvalues (empno,empname) values (:Old.empno,:Old.ename);
  6  END;
  7  /

Trigger created.

这些是员工table的所有记录。

SQL> select * from testemp2;

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20

当前 testdelvalues 值为空。

SQL> select * from testdelvalues;

no rows selected

现在我从 table 中删除一条记录,这将触发删除触发器以将值存储到 testdelvalues 中,存储删除的员工 empno 和姓名。

SQL> delete from testemp2 where empno=7369;

1 row deleted.

SQL> commit;

Commit complete.

记录的详细信息,使用删除触发器插入。

SQL> select * from testdelvalues;

     EMPNO EMPNAME
---------- ----------
      7369 SMITH