DROP TABLE¶
说明¶
删除表定义及该表的所有数据、索引、触发器、约束和权限规范。
参数¶
table_name
是要删除的表名。
RESTRICT|CASCADE
- RESTRICT确保只有不存在完整性约束的表才可以被删除。
- CASCADE任何引用的视图或完整性约束都将被删除。
默认为RESTRICT
IF EXISTS
当存在一个同名的关系时会删除表,否则不会删除表,且会打印NOTICE提示信息
注解
除去表时,表上的规则或默认值将解除绑定,任何与表关联的约束或触发器将自动除去。如果重新创建表,必须重新绑定适当的规则和默认值,重新创建任何触发器并添加必要的约束。
在系统表上不能使用 DROP TABLE 语句。
删除临时表时需要临时表没有与其他会话绑定,删除临时表时会同步删除该临时表的实例和索引等。特别的,当某个会话使用delete语句删除表中数据或使用insert into…select…from 一个空表时,其他会话也不能删除该临时表;但是当某个会话使用truncate截断临时表时,其他会话可以删除临时表。
示例¶
示例1: 删除表
-- 清理环境
DROP TABLE tab1 CASCADE;
-- 创建表
CREATE TABLE tab1 (a INT, b INT);
-- 删除表
DROP TABLE tab1;
示例2: 删除表(依赖此表的视图被置为无效)
-- 清理环境
DROP VIEW view2 CASCADE;
DROP TABLE tab2 CASCADE;
-- 创建表
CREATE TABLE tab2 (a INT PRIMARY KEY, b INT);
-- 创建视图
CREATE VIEW view2 AS SELECT * FROM tab2 ORDER BY a;
-- 删除表(依赖此表的视图被置为无效)
DROP TABLE tab2;
-- 视图已被置为无效
SELECT * FROM view2;
ERROR, view: VIEW2 is invalid
示例3: 删除表(使用 RESTRICT -- 依赖此表的视图被置为无效)
-- 清理环境
DROP VIEW view3 CASCADE;
DROP TABLE tab3 CASCADE;
-- 创建表
CREATE TABLE tab3 (a INT PRIMARY KEY, b INT);
-- 创建视图
CREATE VIEW view3 AS SELECT * FROM tab3 ORDER BY a;
-- 删除表(使用 RESTRICT -- 依赖此表的视图被置为无效)
DROP TABLE tab3 RESTRICT;
-- 视图已被置为无效
SELECT * FROM view3;
ERROR, view: VIEW3 is invalid
示例4: 删除表(使用 CASCADE -- 级联删除依赖此表的视图)
-- 清理环境
DROP VIEW view4 CASCADE;
DROP TABLE tab4 CASCADE;
-- 创建表
CREATE TABLE tab4 (a INT PRIMARY KEY, b INT);
-- 创建视图
CREATE VIEW view4 AS SELECT * FROM tab4 ORDER BY a;
-- 删除表(使用 CASCADE -- 级联删除依赖此表的视图)
DROP TABLE tab4 CASCADE;
-- 视图已被级联删除
SELECT * FROM view4;
ERROR, Relation "VIEW4" does not exist
示例5: 删除表(使用 IF EXISTS)
-- 清理环境
DROP TABLE tab5 CASCADE;
-- 删除表tab5(不会删除并且不报错)
DROP TABLE IF EXISTS tab5;
示例6: 删除表(使用 RESTRICT -- 表中存在约束)
-- 清理环境
DROP TABLE tab6 CASCADE;
DROP TABLE tab7 CASCADE;
-- 创建表
CREATE TABLE tab6 (a INT PRIMARY KEY, b INT);
CREATE TABLE tab7 (a INT PRIMARY KEY, b INT FOREIGN KEY REFERENCES tab6(a));
-- 存在约束,删除失败(若要删除使用CASCADE)
DROP TABLE tab6;
ERROR, 对象依赖无法删除用DROP ... CASCADE删除, Cannot drop table SYSDBA.TAB6 because other objects depend on it
Use DROP ... CASCADE to drop the dependent objects too
DROP TABLE tab6 CASCADE;
DROP TABLE tab7 CASCADE;