了解DELETE和DROP命令

时间:2015-04-25 17:51:29

标签: sql database oracle sql-delete sql-drop

我是计算机科学专业的学生。最近我正在努力学习数据库。我找到了一个link来描述DELETE和DROP命令之间的区别。我理解它们与最重要的一个区别 - DELETE只删除DROP删除表/对象的数据。

但我无法理解一个区别 - DELETE命令触发DML触发器,其中DROP不会触发任何DML触发器。该链接仅说明了这一事实,没有任何解释。有人可以解释一下,这样我就可以理解它了。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

DELETE保留表但删除其中的部分或全部行。 DROP会删除该表及其所有数据,以使该表不再存在。

答案 2 :(得分:2)

  

“DELETE命令触发DML触发器,其中DROP不触发任何DML触发器”'

在Oracle&一些其他DB提供触发器。触发器正在注意,但子程序将在INSERT,UPDATE,DELETE等DML操作上执行。 说更新表中的某些行,可以调用触发器。

类似地,当您执行delete语句时,可以执行触发器。通过触发器获得更多理解。

答案 3 :(得分:2)

删除和名称说明将根据您的规格和要求从表中删除所有或部分行, drop将从模式中删除表。

至于触发器,这是一个例子。(它们只在dmls上启动,而不是在ddls上启动) 我有一个名为testmp2的表,其中包含员工详细信息和另一个表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.

这些是员工表中的所有记录。

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

现在我从表中删除一条记录,该记录将触发一个删除触发器,将值存储到testdelvalues中,存储删除的员工empno和名称。

SQL> delete from testemp2 where empno=7369;

1 row deleted.

SQL> commit;

Commit complete.

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

SQL> select * from testdelvalues;

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