我是计算机科学专业的学生。最近我正在努力学习数据库。我找到了一个link来描述DELETE和DROP命令之间的区别。我理解它们与最重要的一个区别 - DELETE只删除DROP删除表/对象的数据。
但我无法理解一个区别 - DELETE命令触发DML触发器,其中DROP不会触发任何DML触发器。该链接仅说明了这一事实,没有任何解释。有人可以解释一下,这样我就可以理解它了。
答案 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