DROP 语句
DROP语句用于删除当前服务器上的对象。 除了存储组,任何直接或间接依赖于该对象的任何对象也将被删除。 每当有物品被丢弃时,其描述将从当前服务器的目录中删除,任何引用该物品的包裹也将失效。
调用 DROP
此语句可嵌入应用程序中或者以交互方式发出。 这是一个可执行语句,只有在DYNAMICRULES RUN行为生效时才能动态准备。 更多信息,请参阅授权ID和动态SQL。
授权 DROP
要删除以下对象,权限集必须至少包含以下列出的一个机构或权限:
- 表格、表格空间或索引:
- 对象的所有权(对于索引,所有者是表或索引的所有者)
- DBADM 权限
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
- 数据库:
- 数据库中的DROP权限
- 数据库的 DBADM 或 DBCTRL 权限
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
存储器组:

- 对象的所有权
- SYSADM 或 SYSCTRL 权限
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)

- 查看:
- 对象的所有权
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM 权限
- 表格或视图的别名:
- 对象的所有权
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
- 序列的别名:
- 对象的所有权
- 架构上的DROPIN特权
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
- 包:
- 套餐所有权
- 由包裹所有者授予的BINDAGENT特权
- PACKADM 授权收集或所有收藏
- SYSADM 或 SYSCTRL 权限
- 同义词:
- 同义词的所有权
- 角色或可信环境:
- 对象的所有权
- SYSADM 或 SYSCTRL 权限
- SECADM
- 行许可或列掩码:
- 至少SECADM授权
用户定义类型、全局变量、序列、存储过程、触发器或用户定义函数:
- 物品所有权 1
- 架构上的DROPIN特权
- SYSADM 或 SYSCTRL 权限
- 系统 DBADM
安装 SYSOPR 权限(当前进程的 SQLID 设置为 SYSINSTL 时)
权限设置:
如果语句嵌入到应用程序中,权限集就是计划或软件包所有者所拥有的权限。 如果语句是动态准备的,则权限集是进程的每个授权ID所拥有的权限集的并集。 如果在一个可信的环境中运行,且具有某个角色,则权限集还包括与主授权 ID 关联的角色所拥有的权限。 但是,在确定是否拥有DROPIN模式权限时,隐式模式匹配不适用于该角色。
语法 DROP
别名:
参数类型:
数据类型:
内置类型:
描述 DROP
- alias-designator
- PUBLIC
- 指定要删除的别名是公共别名。 别名必须标识SYSPUBLIC模式中存在的别名。
如果指定了PUBLIC关键字,则别名必须标识当前服务器上存在的公共别名。
- ALIAS 别名
- 标识要删除的别名。 别名必须标识当前服务器上存在的别名。
删除表或视图的别名对任何视图、已实现的查询表或使用别名定义的同义词均无影响。 如果别名在行权限或列掩码的定义中被引用,则不能删除。
删除序列的别名对使用该别名定义的任何视图或具体化查询表均无影响。 如果别名在嵌入式SQL函数的定义中被引用,则不能删除。 当序列的别名被删除时,所有引用该序列别名的包都将失效。
如果别名在行权限或列掩码的定义中被引用,则不能删除该别名。
- FOR TABLE
- 指定要删除的别名是表或视图的别名。 删除表的别名对任何视图、已实现的查询表或使用别名定义的同义词均无影响。
- FOR SEQUENCE
- 指定要删除的别名是序列。 删除序列的别名对任何视图或使用别名定义的实体查询表都没有影响。
- DATABASE 数据库名称
- 标识要删除的数据库。 名称必须标识当前服务器上存在的数据库。 DSNDB04 或 不得指定。 DSNDB06 特权集必须包括系统管理员权限。
每当删除数据库时,其所有表空间、表、索引空间和索引也会被删除。 数据库中表格空间和索引定义的任何未完成的更改也将被放弃。
只有当数据库中包含关联的系统周期时间表时,才能删除包含历史表的数据库。 当关联的历史表位于另一个数据库中时,您可以删除包含系统周期时间表的数据库。 在这种情况下,操作会级联,将历史表从另一个数据库中删除。
只有当数据库中包含关联的已启用存档的表时,才能删除包含存档表的数据库。 当关联的存档表包含在另一个数据库中时,您可以删除包含已启用存档的表的数据库。 在这种情况下,操作会级联,将归档表放入另一个数据库中。
如果数据库与仅加速器表相关联,则不能删除该数据库。
- FUNCTION 或者 SPECIFIC FUNCTION
- 确定要删除的功能。 当前服务器上必须存在该函数,并且必须使用CREATE FUNCTION语句定义了该函数。 特殊功能可通过其名称、功能签名或特定名称来识别。
从模式中删除指定的函数定义。
CREATE TYPE 语句隐式生成的函数不能使用 DROP 语句删除。 当删除不同类型时,它们也会被隐式删除。
如默认关键字RESTRICT所示,如果存在以下任何依赖关系,则不会放弃该功能:
- 另一个函数源自该函数。
- 视图使用该函数。
- 触发器包使用该功能。
- 使用函数定义一个已实现的查询表。
- 行权限或列掩码的定义使用函数。
当一项功能被删除时,该功能的所有权限也会被删除。 任何依赖于被删除功能的软件包都将失效。 所有包裹副本也标记为“VALID='NO'”。
如果函数是编译后的 SQL 标量函数,与该函数相关的包也会被删除。
已编译 SQL 标量函数的所有版本都会被删除。 要删除编译 SQL 标量函数的特定版本,请使用带有 DROP VERSION 子句的 ALTER FUNCTION 语句(编译 SQL 标量函数)。
- FUNCTION 功能名称
- 通过名称识别功能。 函数名必须准确标识一个函数。 该函数可以有任意数量的参数。 如果在指定或隐式模式中存在多个具有指定名称的函数,则返回错误。
- FUNCTION 函数名(参数类型,……)
- 通过功能签名识别功能,该签名是唯一标识功能的。 函数名(参数类型…… ) 必须确定具有指定函数签名的函数。 指定的参数必须与创建函数时指定相应位置的数据类型相匹配。 数据类型的数量以及数据类型的逻辑连接用于识别要删除的特定功能实例。 数据类型的同义词被视为匹配项。
如果函数是用表参数定义的(在CREATE FUNCTION语句中指定了 LIKE TABLE name AS LOCATOR子句 ,以指示输入参数之一是转换表),则函数签名不能用于唯一标识函数。 请使用其他语法变体之一来识别该函数,如果函数名称是唯一的,请使用函数名称,否则请使用特定名称。
如果指定了函数名( ),则指定的函数必须不带参数。
- 功能名称
- 标识函数名称。
- (参数类型,……)
- 确定功能的参数。
如果指定了不合法的类型名称, Db2 将搜索 SQL路径 ,以解析该类型名称的架构名称。
对于具有长度、精度或比例属性的数据类型,请使用以下选项之一:
- 空括号表示数据库管理器在判断数据类型是否匹配时忽略该属性。 例如,DEC()将被视为与数据类型为DEC(7,2)的函数参数匹配。 同样,DECFLOAT()将被视为与DECFLOAT(16)或DECFLOAT(34)匹配。 但是,不能在空括号中指定 FLOAT,因为其参数值表示特定数据类型(REAL 或 DOUBLE)。
- 如果指定了长度、精度或比例属性的特定值,则该值必须与CREATE FUNCTION语句中(隐式或显式)指定的值完全匹配。 如果数据类型为浮点型,精度不必与指定的值完全匹配,因为匹配是基于数据类型(REAL或DOUBLE)的。
- 如果未明确指定长度、精度或比例,且未指定空括号,则默认使用数据类型的属性。 隐式长度必须与CREATE FUNCTION语句中(隐式或显式)指定的值完全匹配。
对于具有子类型或编码方案属性的数据类型,指定 FOR 子类型 DATA 子句或 CCSID 子句是可选的。 如果省略任一子句,则表明 Db2 在判断数据类型是否匹配时忽略该属性。 如果您指定了任一子句,则它必须与CREATE FUNCTION语句中隐式或显式指定的值相匹配。
- AS LOCATOR
- 指定函数定义为接收此参数的定位器。 如果指定了 AS LOCATOR,则数据类型必须是 LOB 或基于 LOB 的不同类型。
- SPECIFIC FUNCTION 专有名词
- 通过特定名称识别功能。 特定名称必须标识当前服务器上存在的特定功能。
- INDEX 索引名称
- 标识要删除的索引。 该名称必须标识当前服务器上存在的一个用户定义的索引,但不能标识辅助表上的填充索引或为包含XML列的表隐式创建的索引。 (关于在目录表中删除用户自定义索引的详细信息,请参阅目录中允许的SQL语句。) 辅助表上的填充索引只能通过删除主表来删除。 名称不得用于标识参与克隆关系的对象的辅助表。
如果删除的索引是通过指定 ENDING AT 子句来定义分区边界的,则该表将转换为使用表控制的分区。 最后一个分区的高限键设置为升序键列的最大值或降序键列的最小值。
每当直接或间接删除索引时,其索引空间也会被删除。 在提交操作之前,删除的索引空间名称不能重复使用。 对指数定义的任何未决更改也将被放弃。
如果索引是用于执行唯一约束(主键或唯一键)的唯一索引,则必须先删除唯一约束,才能删除索引。 此外,如果一个唯一约束支持一个参照约束,则除非删除参照约束,否则不能删除索引。
然而,如果唯一键是在 Db2 版本7之前创建的,并且唯一键约束没有关联的参照约束,则可以不先删除唯一键约束,而直接删除唯一的索引(仅针对唯一的键)。 有关删除约束的信息,请参阅 ALTER TABLE语句。
如果索引用于时间参照约束的外键,则必须先删除参照约束,然后才能删除索引。
如果明确创建了表空间,并删除了唯一的索引,且该索引定义在定义为默认生成的 ROWID 列上,则该表仍然可以使用,但无法向该表中插入行。
如果隐式创建表空间,则不能删除索引,如果索引定义在定义为默认生成的ROWID列上。
如果辅助表上的索引为空,则主表会被标记为不完整。 如果隐式创建了基本表空间,则不能删除辅助表上的索引。
如果表中的其他索引在键序列前缀中没有相同的列组,则删除索引将导致SYSCOLDIST和SYSCOLDISTATS目录表中的行被删除。
- MASK 假名
- 标识要删除的列掩码。 名称必须标识当前服务器上存在的列掩码。
- PACKAGE collection-id.package-name
- 标识要删除的软件包版本。 名称加上隐式或显式指定的版本号必须标识当前服务器上存在的软件包版本。 省略version-id 即隐式指定空版本。
名称不得识别触发器包或与SQL例程相关的包。 触发器包只能通过删除关联的触发器或主题表来删除。 与本地 SQL 过程关联的包只能通过带有 DROP VERSION 子句的 ALTER PROCEDURE 语句(该子句指定要删除的特定版本)或 DROP PROCEDURE 语句(如果它是为过程定义的唯一版本)来删除。
指定此子句可删除因使用BIND COPY命令部署本机SQL程序的版本而创建的包。
如果一个包有当前、先前和原始副本,则DROP语句将删除所有副本。
- VERSION 版本号
- version-id 是创建DBRM时分配给包的DBRM的版本标识符。 如果未指定版本标识符 ,则使用空版本作为版本标识符。
在以下情况下,请定义版本标识符:
- 由 VERSION(AUTO) 预编译器选项生成
- 以数字开头
- 包含小写或混合大小写字母
有关版本标识符的更多信息,请参阅创建程序包版本中有关准备应用程序以供执行的信息。
- PERMISSION 权限名称
- 标识要删除的行许可权。 名称必须标识当前服务器上存在的行权限。 该名称不得识别默认行权限,该权限由 Db2 隐式创建。
- PROCEDURE 程序名
- 标识要删除的存储过程。 该名称必须标识当前服务器上使用CREATE PROCEDURE语句定义的存储过程。
从模式中删除指定的存储过程定义。 该程序的所有特权也将被取消,任何依赖于该程序的套餐也将被标记为无效。 如果存储过程是 SQL 存储过程,与存储过程相关联的包也会被删除。
如默认关键字 RESTRICT 所示,如果存在以下任何依赖关系,存储过程将不会被删除:

- 触发器定义包含一个用于识别程序的CALL语句。
- SQL例程定义包含一个用于识别程序的CALL语句。

删除本地 SQL 存储过程的所有版本。 要删除本地 SQL 存储过程的特定版本,请使用带有 DROP VERSION 子句的 ALTER PROCEDURE 语句(SQL - 本地存储过程)。
使用 DROP PACKAGE 语句,可以为使用 BIND COPY 命令创建的本地 SQL 存储过程版本放弃一个包。
- ROLE 角色名称
- 确定要删除的角色。 角色名称必须标识当前服务器上存在的角色。
当某个角色被删除时,之前授予该角色的所有特权和权限将被撤销。 如果删除的角色是动态语句缓存中的语句所有者,则缓存的语句将失效。
如果遇到任何撤销限制,角色不会删除。 撤销限制包括以下内容:- 当撤销角色的权限时,包含从属权限时遇到的限制。
- 该角色是任何特权或权限的授予者,使用ACCESSCTRL或SECADM权限来执行授予。
如果指定了 RESTRICT,则如果存在以下任何依赖关系,则不会放弃角色:
- 该角色与任何可信环境或可信环境中的任何用户相关联。
- 该角色与当前运行的线程相关联。
- 该角色是以下任何物品的所有者:
Object Object - 别名
- 数组类型
- 列掩码
- 数据库
- 单值类型
- 全局变量(V)
- 索引
- JAR 文件
- 具体化查询表
- 程序包
- 角色
- 行许可权
- 序列
- 存储器组
- 存储过程
- 表
- 表空间
- 触发器
- 可信上下文
- 用户定义函数
- 视图
- SEQUENCE 序列名
- 确定要删除的序列。 名称必须与当前服务器上的现有序列一致。
序列名不能是 Db2 使用的内部序列对象的名称(包括为 DB2_GENERATED_DOCID_FOR_XML 列隐式生成的序列)。 系统为标识列或隐式创建的数据库生成的序列无法使用DROP SEQUENCE语句删除。 当包含标识列的表被删除时,标识列的序列对象会被隐式删除。
默认关键字“RESTRICT”表示,如果存在以下任何依赖关系,则不会删除序列:
- 存在使用NEXT VALUE或PREVIOUS VALUE表达式中的序列的触发器。
- 存在使用NEXT VALUE或PREVIOUS VALUE表达式中的序列的嵌入式SQL函数。
每当删除一个序列时,该序列的所有权限也会被删除,引用该序列的软件包也会失效。 删除序列,即使删除过程被回滚,也会导致序列中尚未分配的缓存值丢失。
- STOGROUP stogroup-name
- 标识要删除的存储组。 该名称必须标识当前服务器上存在的存储组,而不能标识任何表空间或索引空间使用的存储组。
有关删除数据库的默认存储组的影响,请参阅删除默认存储组。
- SYNONYM 同义词
- 确定同义词drop。 在静态DROP SYNONYM语句中,名称必须标识计划或包的所有者拥有的同义词。 在动态DROP SYNONYM语句中,名称必须标识SQL授权ID拥有的同义词。 因此,拥有SYSADM权限的用户可以使用交互式SQL删除任何同义词,只需将CURRENT SQLID设置为同义词的所有者即可。
删除同义词会使依赖包和动态语句缓存失效。 删除同义词对使用该同义词定义的视图、物化查询表或别名没有影响。
如果同义词在行权限或列掩码的定义中引用,则不能删除。
- TABLE 表名或别名
- 确定要删除的表格。 名称必须标识当前服务器上存在的表。 不得包含以下任何类型的表格:
- 目录表
目录表
FL 506 分区(非 UTS)表空间中的表
- 为XML列隐式创建的表格
- 一个填充的辅助表
分区(非 UTS)表空间中的表只能通过丢弃表空间来丢弃。
已填充的辅助表或为 XML 列隐含创建的表只能通过放弃相关的基本表来放弃。如果指定了别名 ,则实际表将被删除,就像指定了表名一样。 但是,别名不会删除。 使用DROP ALIAS语句可以删除它。
当桌子直接或间接掉落时,以下物品也会掉落:- 所有特权摆在桌面上
- 表中所有参照约束都是父级或从属级
- 表中定义的所有同义词、观点和索引
- 所有行权限(包括默认行权限)
- 为表格创建的所有列掩码
FL 506 如果该表的表空间是通用表空间、LOB 表空间或隐式创建的表空间,也会被删除。 但是,如果包含的数据库是隐式创建的,则不会删除。 被删除的表空间和索引定义的任何待定更改也会被删除。
更多信息,请参阅删除隐式创建的数据库。
当表被直接或间接删除时,该表上定义的所有已实现的查询表也会被删除。 当直接或间接删除已实现的查询表时,以下项目也会被删除:
- 实体化查询表的所有权限
- 在具体化查询表上定义的所有同义词、视图和索引
在具体化查询表中定义的任何别名都不会被删除。 任何依赖于已删除的物化查询表的包都将被标记为无效。
您不能使用DROP TABLE删除克隆表。 删除克隆表时,必须将ALTER TABLE语句与DROP CLONE子句结合使用。 如果删除一个克隆关系中的基础表,则关联的克隆表也会被删除。 对于参与克隆关系的对象,您不能删除辅助表。
如果将表定义为系统周期时间表的历史表,则不能删除该表。
如果行权限或列掩码的定义中引用了该表,则不能删除该表。
要删除系统周期临时表,权限集还必须包含删除历史表所需的授权。 当系统周期临时表被删除时,历史表也会被删除。
如果删除包含LOB列的表,则与该表关联的辅助表以及辅助表上的索引也会被删除。
FL 506 Db2 还会丢弃包含辅助表的 LOB 表空间,无论这些 LOB 表空间是隐式还是显式创建的。
如果删除包含XML列的表,则所有XML列中隐式创建的对象也会被删除。
如果删除一个空的辅助表,则基础表的定义将被标记为不完整。 如果隐式创建了基本表空间,则无法删除辅助表。
如果表中有一个安全标签列,则DROP语句的主授权ID必须具有有效的安全标签,并且 RACF® SECLABEL类必须处于活动状态。
如果删除使用哈希组织的表,则哈希组织的所有目录条目都会被清理。
如果删除启用了归档的表,则归档表和归档表上定义的任何索引也会被删除。 要删除启用归档的表,权限集还必须包含删除归档表所需的授权。 不能使用DROP语句明确删除归档表。
- TABLESPACE database-name.table-space-name
- 确定要删除的表格空间。 名称必须标识当前服务器上存在的表空间。
数据库名称不得为 DSNDB01 或 DSNDB06。
省略数据库名称就是隐式指定 DSNDB04。 表空间名称不得标识为 XML 列隐式创建的表空间。当某个表格空间直接或间接被删除时,该表格空间中的所有表格也会被删除。 在提交操作之前,不能重复使用已删除的表空间名称。 对表空间及其索引的定义所做的任何更改也将被放弃。
仅当LOB表空间不包含辅助表时,才能删除该表空间。 如果LOB表空间是隐式创建的,则不能删除。
每当包含有LOB列的表的空间被删除时,与该空间关联的所有辅助表以及这些辅助表上的索引也会被删除。
每当删除包含XML列的表的基本表空间时,所有XML列的隐式创建对象也会被删除。
如果表中包含历史表、归档表或与仅加速器表相关联,则不能删除该表空间。
- TRIGGER 触发器名称
- 识别触发器,使其掉落。 名称必须标识当前服务器上存在的触发器。
每当直接或间接删除一个触发器时,该触发器上的所有权限也会被删除,相关的触发器包也会被释放。 触发器包的名称与触发器的名称相同,集合ID是模式名称。
当触发器“INSTEAD OF”被删除时,任何因触发器创建时隐式授予而拥有相关权限的人都将失去该权限。
删除触发器会导致某些包被标记为无效。 例如,如果触发器名称指定了视图 V 上的 INSTEAD OF 触发器,则另一个触发器可能会通过更新视图 V 依赖于触发器名称 ,而该触发器包将失效。
如果触发器有当前副本、先前副本和原始副本,则DROP语句将删除所有副本。
对于高级触发器,所有版本的触发器都会被放弃。 使用带有 DROP VERSION 子句的 ALTER TRIGGER 语句来删除触发器的特定版本。
- TRUSTED CONTEXT 上下文名称
- 确定要删除的可信上下文。 上下文名称必须标识当前服务器上存在的可信上下文。 当信任的环境被删除时,与属性(IP地址、工作名称)和信任环境用户的所有关联也会被删除。 如果当上下文的可信连接处于活动状态时,可信上下文被丢弃,则连接将保持活动状态,直到终止或下次尝试重新使用。
- TYPE 类型名称
- 标识要删除的用户定义类型。 名称必须标识当前服务器上存在的一个用户定义的类型。 默认关键字 RESTRICT 表示,如果存在以下任何依赖关系,则不会删除用户定义的类型:
- 表格列的定义使用用户定义的类型。
- 用户自定义函数的输入或结果参数的定义使用用户自定义类型。
- 存储过程的参数定义使用用户定义的类型。
- 扩展索引的定义使用为用户定义类型隐式生成的转换函数。
- 在过程或函数中,SQL变量的定义使用用户定义的类型。
- 行权限或列掩码的定义使用用户定义的类型。
- 存在一个序列,其数据类型为用户定义类型。
- 为用户定义的类型生成的转换函数之一存在以下依赖关系之一:
- 另一个函数来自其中一个铸造函数
- 视图使用了一个铸造函数
- 触发器包使用铸造函数之一
- 实体化查询表的定义使用铸造函数之一
每当删除用户定义的类型时,该类型的所有权限也会被删除。 此外,在创建用户定义的类型时生成的转换函数以及这些转换函数的权限也会被删除。
- VARIABLE 变量名
- 标识要删除的全局变量。 名称必须标识当前服务器上存在的全局变量。 名称不能识别内置全局变量。 默认关键字 RESTRICT 表示,如果存在以下任何依赖关系,则不会删除全局变量:
- 函数、触发器或视图的定义取决于全局变量
当全局变量被删除时,依赖于全局变量的包将被标记为无效。 如果动态语句缓存中的语句依赖于全局变量,而全局变量被删除,则动态语句缓存中的语句将失效(如果未使用)。
- VIEW 视图名称或别名
- 确定要删除的视图。 名称必须标识当前服务器上存在的视图。
每当直接或间接删除视图时,视图上的所有权限以及视图上定义的所有同义词和视图也会被删除。 每当直接或间接删除视图时,在视图中定义的所有已实现的查询表也会被删除。
如果指定了别名 ,则实际视图将被删除,就像指定了视图名一样。 但是,别名不会被删除,可以使用DROP ALIAS语句删除。
如果视图在行权限或列掩码的定义中引用,则不能删除。
备注 DROP
- DROP的限制:
- DROP受以下限制:
- 当 Db2 实用程序控制数据库的任何部分时,无法执行“删除数据库”操作。
- 当 Db2 实用程序控制索引或其关联表空间时,无法执行DROP INDEX。
- 如果索引是唯一索引,且定义在定义为默认生成的行标识(ROWID)列上,并且表空间定义或表空间中明确创建的任何对象存在待处理更改,则无法执行DROP INDEX。
- 如果索引是驻留在显式创建的LOB表空间中的辅助表上的空索引,并且对基础表空间或基础表空间中的任何对象的定义有未完成的更改,则无法执行DROP INDEX。
- 如果索引是使用哈希组织的表的哈希溢出索引,则无法执行DROP INDEX。
- 当 Db2 实用程序控制包含表的表空间时,无法执行DROP TABLE。
- 如果表是空的辅助表,并且对基础表空间的定义或基础表空间中的任何对象有任何未完成的更改,则无法执行DROP TABLE。
- 当 Db2 实用程序控制表空间时,无法执行DROP TABLESPACE。
在数据共享环境中,以下限制同样适用:- 如果任何成员有活动资源限制规格表(RLST),则不能删除包含该表的数据库或表空间、表本身或表上的任何索引。
- 如果执行删除的成员无法访问由 Db2 管理的数据集,则只会删除这些数据集的目录和目录条目。
具有特定依赖关系的对象不能被删除。 有关这些限制的信息,请参见表 3。 - 物品再造:
- 删除索引或表空间后,必须先提交,才能以相同名称重新创建对象。 如果删除一个没有IN子句(从而隐式创建表空间)的表,则在提交之前,不能以相同的名称重新创建该表。
- 删除父表:
- 删除(DELETE)和删除(DROP)不同,因此不涉及删除规则。
- 删除默认存储组:
- 如果删除数据库的默认存储组,则该数据库将不再具有合法的默认设置。 在数据库中创建表空间或索引的任何语句中,您必须指定“USING”。 你必须这样做,直到出现以下情况:
- 使用CREATE STOGROUP语句创建另一个同名的存储组,或者
- 使用ALTER DATABASE语句为数据库指定另一个默认存储组。
- 仅加速器表:
- 当只包含加速器的表被删除且加速器未激活时,请使用 SYSACCEL_DROP_TABLE 过程来删除加速器中的表。
- 识别仅加速器表的DROP TABLE语句应与其他SQL语句分开,在单独的工作单元中发出。
- 删除一个隐式创建的数据库:
- 当隐式创建的表空间中的表被删除时,隐式创建的表空间和相关对象也会被删除。 但是,隐式创建的数据库不会被删除。 这可能会导致系统中出现大量空数据库。 这些数据库最终可能会被用于新建的隐式表空间。 这些隐式创建的数据库可以使用DROP DATABASE命令删除。
- 删除表格空间或索引:
- 要删除表空间或索引,与表空间或索引关联的缓冲池的大小不能为零。
- 删除LOB表空间:
FL 506 当驻留在 LOB 表空间中的辅助表被丢弃时,LOB 表空间也会自动丢弃。 如果显式创建的 LOB 表空间不包含辅助表,则可以放弃该表空间。
- 当 Db2 对象的数据集已被删除时,删除数据库:
- 当与数据库关联的 Db2 对象的部分数据集已被删除时,DROP DATABASE将按以下方式执行:
- 对于 Db2 管理的对象:
- 如果基础数据集存在,则DROP DATABASE语句将删除这些数据集。 如果数据集不存在,则 DROP DATABASE 只会删除这些数据集的目录条目。
- 对于用户管理的对象:
- DROP DATABASE语句只会删除数据集的目录条目。 在DROP DATABASE语句执行完毕后,需要手动删除基础数据集。
- 在工作文件数据库中删除一个表空间:
- 如果数据共享组中的某位成员删除工作文件数据库中的表空间或整个工作文件数据库,而该表空间或数据库属于另一位成员,则执行成员无法访问的 Db2 管理数据集不会被删除。 但是,这些数据集的目录和目录条目将被删除。
- 删除资源限制功能(调节器)索引、表和表空间:
- 当RLST处于活动状态时,您不能对数据共享组中任何成员上处于活动状态的RLST关联对象发出DROP DATABASE、DROP INDEX、DROP TABLE或DROP TABLESPACE命令。 详情请参阅 “数据共享的资源限制机制影响 ”。
- 临时表:
- 要删除已创建的临时表或已声明的临时表,请使用DROP TABLE语句。
- 删除一个已生成的查询表:
- 要删除一个已物化的查询表,请使用 DROP TABLE 语句。
- 放弃一个别名:
- 删除一个表或视图不会删除其别名。 但是,如果您使用DROP TABLE语句并指定表或视图的别名,则该表或视图将被删除。 要删除别名,请使用DROP ALIAS语句。
- 从隐式创建的表格空间中删除表格:
- 如果从隐式创建的表空间中删除一个表,则以下相关对象也会被删除:
- 执行主要和唯一的关键索引
- 任何LOB表空间、辅助表和辅助索引
- ROWID索引(如果ROWID列被定义为默认生成)
FL 506 如果在表上定义了任何 LOB 列,则将放弃 LOB 表空间。
- 在主表和辅助表上添加索引:
- 除非隐式创建了基础表空间,否则您可以使用DROP INDEX语句在辅助表上明确删除空索引。 在以下情况下,辅助表上的空索引或已填充索引将被隐式删除:
- 辅助表为空,且明确删除(仅删除空索引)。
- 辅助表的关联基本表被删除。
- 包含关联基本表的基表空间将被删除。
除非隐式创建了基础表空间,否则您可以使用DROP TABLE语句明确删除空的辅助表。 在以下情况下,将隐式删除空表或已填充的辅助表:
- 辅助表的关联基本表被删除。
- 包含关联基本表的基表空间将被删除。
下表显示了哪些DROP语句隐式或显式地导致辅助表和该表上的索引被删除,如列中的“D”所示。表 2. 各种DROP语句对显式创建的表空间中的辅助表和索引的影响 语句 辅助表 辅助表索引 已填充 空 已填充 空 删除表空间(基本表空间) D D D D 删除表(基础表) D D D D DROP TABLE(辅助表) D D DROP INDEX(辅助表索引) D 备注: D表示该表或索引已删除。 - 删除迁移的索引或表空间:
- 在这里,
迁移
是指通过分层存储管理器(DFSMShsm)进行的迁移。 Db2 不会等待任何迁移数据集的调用。 因此,执行语句所需的时间与调用无关。 - 放弃一个值得信赖的环境:
- 在提交 DROP TRUSTED CONTEXT 语句后,可信上下文删除语句生效。 如果 DROP TRUSTED CONTEXT 语句导致错误或回滚,则不会删除受信任的上下文。
- 避免因过度锁止而导致的DROP故障
- 删除具有 COPY YES 属性的表空间、数据库或索引,将删除 SYSCOPY 和 SYSLGRNX 目录统计表中的所有相应记录。 如果锁的结构尺寸无法容纳在DROP处理过程中获得的锁的数量,则DROP会失败。 如果SYSCOPY、SYSLGRNX或其他目录统计表包含许多条目,尤其是您要删除的对象是多年前创建的或包含许多分区,则删除失败的可能性更大。 如果频繁复制对象,而相对较少运行“修改恢复”和“修改统计”实用程序,则发生DROP故障的可能性也会增加。
为避免删除失败,请在删除对象前运行“修改恢复”和“修改统计”实用程序。 如果丢弃克隆表,则需要指定CLONE关键字,以从目录和目录中删除克隆对象的恢复和统计信息。 您可以指定年龄(AGE)或日期(DATE),以清除所有恢复和统计信息,无论过去的更新、复制或清理频率如何。 请注意,使用AGE(年龄)或DATE(日期)运行MODIFY(修改)实用程序,在删除对象后,除非您事先制作了副本或其他形式的备份,否则将无法恢复这些对象。
此外,请确保您的应用程序经常提交数据丢失,特别是对于包含多个表空间的数据库和包含多个表的表空间。您还可以增加锁的结构尺寸,以应对此类活动期间激增的锁需求。
- 包裹失效:
- 根据指定的条款和关键字以及其他因素,此语句可能会使所有依赖于目标对象的程序包失效,有时还会通过级联效应影响其他相关对象。 更多信息,请参阅 “导致套餐失效的变更 ”。
- 丢弃物体时的依赖性:
- 如果其他对象依赖于DROP语句中指定的对象,则这些依赖对象也可能被删除、失效或无法使用,或者DROP语句可能失败。 这些影响还会波及到依赖于被丢弃的从属对象的任何对象。 要确定DROP语句的全部间接影响,请检查任何从属对象的情况,检查每个从属对象是否拥有自己的从属对象,并检查这些对象类型的规则。
下表显示了根据DROP语句指定的对象类型和从属对象类型执行DROP语句的结果。 字母的含义如下:
- D(级联下落)
- 如果存在任何指定类型的从属对象,它们也会被删除。 这种效应会传递给任何依赖于被丢弃的从属物体的物体。
- R(限制)
- 如果存在任何指定类型的从属对象,则DROP语句将失败。 此外,如果任何从属对象因其自身从属对象的限制性从属关系而无法删除,则DROP语句将失败。
- V(无效)
- 如果存在附属套餐,则附属套餐失效。
例如,假设视图B在表A上定义,视图C在视图B上定义。 在下表中,DROP TABLE行中的视图列中的“D”表示在删除表A时,视图B也会被删除。 接下来,由于视图C取决于视图B,请在视图列中查看DROP VIEW。 列中的“D”表示C视图也将被删除。
表 3. 有依赖关系的物体下落的影响 DROP
语句依赖对象类型 别名
栏 遮罩函数全局变量
索引过程行
权限序列STOGROUP同义词表
表格空间触发器类型视图DROP ALIAS R V V R V DROP FUNCTION R 4 R 12 R R 删除索引 1 V V V DROP PROCEDURE R 12 R 12 R 删除角色 R R R R R R R R R R R R R R R DROP SEQUENCE R8 R 12 R DROP STOGROUP R5 R5 DROP SYNONYM R 删除表6 R 16 D 14 D V R 16 D D 15 D 7 D DROP TABLESPACE V D V D V DROP TRIGGER V V V DROP TYPE R R 2 R 9 R 3 R R R V11 DROP VARIABLE R V R R DROP VIEW R D 14 V R D D 15 D 10 D 表说明:- 与索引相关的索引空间被删除。
- 如果函数依赖于要删除的用户定义类型,则不能删除该用户定义类型,除非该函数是为该用户定义类型创建的转换函数之一。
- 如果存储过程的参数定义使用了用户定义的类型,则不能删除该用户定义的类型。
- 如果其他用户自定义函数依赖于被删除的用户自定义函数,则不能删除该函数。
- 如果存储组被任何表空间或索引空间使用,则不能删除该存储组。
FL 506 如果表位于显式创建的通用表空间或任何隐式创建的表空间中,该表空间也会被删除。
- 当删除一个主题表时,任何关联的触发器和相关的触发器包也会被删除。
- 此限制仅适用于SQL函数。
- 在这种情况下,索引必须是基于表达式的索引。
- 当删除一个主题视图时,任何相关的触发器和相关的触发器包也会被删除。
- 任何依赖于“代替”触发器的程序包将被标记为无效。
- 本地 SQL 过程引用的常规或序列不能被删除。
- 如果存在相关的内联SQL表函数,则不能删除别名或同义词。
- 当删除表或视图时,任何相关的内联SQL表函数也会被删除。
- 当删除一个表或视图时,任何相关的已物化查询表也会被删除。
- 当一张表被删除时,直接在该表上定义的任何行权限或列掩码也会被删除。 如果任何行权限或列掩码引用了正文中的表,则不能删除该表。
- 其他语法和同义词:
- 为了与 Db2 的早期版本或 Db2 系列中的其他产品兼容, Db2 支持以下关键词:
- 数据类型或唯一类型作为类型(TYPE)的同义词
- PROGRAM作为PACKAGE的同义词
- DROP ALIAS SYSPUBLIC.name 可以指定为 DROP PUBLIC ALIAS SYSPUBLIC.name 的替代项
例子 DROP
- 示例 1
- 删除表 DSN8C10. DEPT。
DROP TABLE DSN8C10.DEPT; - 示例 2
- 数据库中 DSN8S12D 数据库中 DSN8D12A。
DROP TABLESPACE DSN8D12A.DSN8S12D; - 示例 3
- 查看DSN8C10.VPROJRE1 :
DROP VIEW DSN8C10.VPROJRE1; - 示例 4
- 删除 DSN8CC0 版本标识符 VERSZZZZ。 该套餐已收入 DSN8CC61。 使用版本标识符来区分要删除的包和同一集合中同名的其他包。
DROP PACKAGE DSN8CC61.DSN8CC0 VERSION VERSZZZZ; - 示例 5
- 删除 DSN8CC0 版本标识符
1994-07-14-09.56.30.196952
。 当版本标识符由预编译选项 VERSION(AUTO) 生成时,请对版本标识符进行分隔。DROP PACKAGE DSN8CC61.DSN8CC0 VERSION "1994-07-14-09.56.30.196952"; - 示例 6
- 如果当前不使用文档类型,请将其删除:
DROP TYPE DOCUMENT; - 示例 7
- 假设您是史密斯,原子量是CHEM模式中唯一具有该名称的函数。 删除原子质量。
DROP FUNCTION CHEM.ATOMIC_WEIGHT; - 示例 8
- 假设您是史密斯,在史密斯模式中创建了CENTER函数。 使用功能签名来识别要删除的功能实例,然后点击删除中心。
DROP FUNCTION CENTER(INTEGER, FLOAT); - 示例 9
- 假设您是史密斯,在JOHNSON模式中创建了另一个名为CENTER的函数,并为其指定了特定名称 FOCUS97。 删除CENTER,使用特定名称来识别要删除的功能实例。
DROP SPECIFIC FUNCTION JOHNSON.FOCUS97; - 示例 10
- 假设您是史密斯,存储过程OSMOSIS位于BIOLOGY模式中。 放弃渗透。
DROP PROCEDURE BIOLOGY.OSMOSIS; - 示例 11
- 假设您是史密斯,并且您的架构中存在触发器“奖金”。 奖金。
DROP TRIGGER BONUS; - 示例 12
- 放弃角色 CTXROLE:
DROP ROLE CTXROLE; - 示例 13
- 放弃可信的上下文 CTX1:
DROP TRUSTED CONTEXT CTX1; - 示例 14
- 删除公开别名 PUBALIAS1:
DROP PUBLIC ALIAS PUBALIAS1 FOR SEQUENCE;
