DROP DOMAIN

说明

删除用户定义域

语法

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;