2015-04-25 90 views
0

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

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

+0

DELETE语句在事务边界的上下文中运行,该事务边界可以被提交或回滚。 DRL语句是DDL而不是DML,不能通过回滚来撤消。 – crowne

+0

'DROP'是DDL语句,DDL语句从不触发DML触发器 –

回答

2

“DELETE命令消防DML触发器DROP地方不会触发任何DML触发器””

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

同样,当您执行删除语句时,可以执行触发器。通过触发器获得更多理解。

+0

谢谢,现在它是有道理的。 – KajolK

2

DELETE保留表格但删除其中的一些或全部行。 DROP删除表及其所有数据,使表不再存在。

4

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

+0

但我发现TRUNCATE不触发任何触发器。但TRUNCATE只会在数据不变的情况下删除数据。那么对于TRUNCATE怎么可能,或者我错了/错过了什么? – KajolK

+1

有两种操作方式 - DML - 数据操作(语言)和DDL - 数据定义(语言)。 INSERT,UPDATE,DELETE是DML操作并将触发DML触发器。 CREATE TABLE,ALTER TABLE,DROP TABLE,TRUNCATE TABLE是DDL操作,不​​会触发DML触发器。 –

2

删除和名称解释将根据您的规范和要求从表中删除全部或部分行, 其中,drop将从表中删除该表。

至于触发器,这里就是一个例子。(他们只是开枪DMLS,不是的DDL) 我有一个表称为testmp2拥有员工详细信息和用于存储仅删除deatils另一个表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