DROP DOMAIN¶
说明¶
删除用户定义域
参数¶
domainname
域名
CASCADE|RESTRICT
- CASCADE自动删除依赖域的对象。
- RESTRICT当存在依赖对象不删除此域。
缺省时使用RESTRICT。
注解
必须是域的所有者才能删除该域
示例¶
示例1: 删除域类型
-- 清理环境
DROP TABLE tab1 CASCADE;
DROP DOMAIN dm1 CASCADE;
-- 创建域类型
CREATE DOMAIN dm1 char(6) NOT NULL;
-- 创建表(使用域类型)
CREATE TABLE tab1 (a INT, b dm1);
INSERT INTO tab1 VALUES (1, 'aaa');
INSERT INTO tab1 VALUES (2, 'bb');
SELECT * FROM tab1 ORDER BY a;
A(int) |B(DM1) |
------------------------
1 |aaa |
------------------------
2 |bb |
总数目:2
-- 插入 NULL 值
-- 违反域类型,插入失败
INSERT INTO tab1 VALUES (3, NULL);
ERROR, 域 DM1 不允许空值
SELECT * FROM tab1 ORDER BY a;
A(int) |B(DM1) |
------------------------
1 |aaa |
------------------------
2 |bb |
总数目:2
-- 删除域类型
-- tab1 的 b 列依赖域类型,删除失败
DROP DOMAIN dm1;
ERROR, 对象依赖无法删除用DROP ... CASCADE删除, Cannot drop type DM1 because other objects depend on it
Use DROP ... CASCADE to drop the dependent objects too
-- 强制删除域类型
DROP DOMAIN dm1 CASCADE;
SELECT * FROM tab1 ORDER BY a;
A(int) |B(char) |
-------------------------
1 |aaa |
-------------------------
2 |bb |
总数目:2
-- NOT NULL 约束已被级联删除
-- 插入 NULL 成功
INSERT INTO tab1 VALUES (3, NULL);
SELECT * FROM tab1 ORDER BY a;
A(int) |B(char) |
-------------------------
1 |aaa |
-------------------------
2 |bb |
-------------------------
3 |null |
总数目:3
-- 删除表
DROP TABLE tab1;