达梦数据库:删除表和清空表

本文介绍了数据库中删除表和清空表的操作,强调了数据安全的重要性。删除表将永久移除表结构及关联索引、触发器,而清空表则保留结构但删除所有数据。TRUNCATE语句用于快速清空表,不产生回滚信息,适合大量数据的情况。操作时需注意权限和外键约束,避免影响其他对象或导致不可逆数据丢失。
摘要由CSDN通过智能技术生成

1.前言

对数据库来说,最重要的是里面的数据,数据安全是数据库中的重中之重。任何涉及有关数据的操作都应谨慎,尤其是涉及删除,清空表的操作,下面博主介绍下关于删除表和清空表的语法,谨慎操作。

2.删除表

当一个表不再使用时,可以将其删除。删除表时,将产生以下结果:

  1. 表的结构信息从数据字典中删除,表中的数据不可访问;
  2. 表上的所有索引和触发器被一起清除;
  3. 所有建立在该表上的同义词、视图和存储过程变为无效;
  4. 所有分配给表的簇标记为空闲,可被分配给其他的数据库对象。
    一般情况下,普通用户只能删除自己模式下的表。若要删除其他模式下的表,则必须具有 DROP ANY TABLE 数据库权限。
    以下语句可删除 employee 表:
DROP TABLE employee;

删除不存在的表会报错。若指定 IF EXISTS 关键字,删除不存在的表,不会报错,如:

DROP TABLE IF EXISTS employee;

如果要删除的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,则需要在 DROP TABLE 语句中包含 CASCADE 选项,如:

DROP TABLE employee CASCADE;

3.清空表

有些情况下,当表的数据不再使用时,需要删除表的所有行,即清空该表。DM8 支持以下方式来删除表中的所有的行:

  1. 使用 DELETE 语句;
  2. 使用 DROP 和 CREATE 语句;
  3. 使用 TRUNCATE 语句。

3.1 使用delete

使用 DELETE 语句能删除表中的行。例如,下面的语句删除 employee 表中的所有行:

DELETE FROM employee;

但是,使用 DELETE 清空表,当表有很多行时,会消耗很多系统资源。因为,DELETE操作需要 CPU 时间,并且会产生大量的 REDO 日志和 UNDO 记录。另外,如果表上关联了元 组级触发器,每删除一行,就会启动一次触发器。这都需要大量的系统资源。

3.2 使用 DROP 和 CREATE

使用 DROP 删除一个表,然后创建一个同名的表,也可以达到清空表的效果。例如,下面的语句先删除 employe 表,之后再重新创建。

DROP TABLE EMPLOYEE;
CREATE TABLE EMPLOYEE();

当删除和重新创建表时,所有与之相关联的索引、完整性约束和触发器也被删除。同样,所有针对被删除表的授权也会被删除。

3.3 使用 TRUNCATE

使用 TRUNCATE 语句能删除表中的所有行。例如,下面的语句清空 employee 表。

TRUNCATE TABLE EMPLOYEE;

TRUNCATE 语句为我们提供了一种快速、有效地删除表所有行的方法。并且 TRUNCATE 是一个 DDL 语句,不会产生任何回滚信息。执行 TRUNCATE 会立即提交,而且不能回滚。
TRUNCATE 语句并不影响与被删除的表相关联的任何结构、约束、触发器或者授权。 另外,DM 数据库 TRUNCATE 表后,原来分配给该表的空间会被释放,供其他数据库对象使用,大大提高空间的利用效率。
一般情况下,普通用户只能 TRUNCATE 自己模式下的表。若要 TRUNCATE 其他模式下的表,则必须具有 DROP ANY TABLE 数据库权限。
如果要清空的表被其他表引用,即其他表的外键引用了表的任何主键或唯一键,并且子表不为空或子表的外键约束未被禁用,则不能 TRUNCATE 该表。

总结

1、在速度上,一般来说,drop> truncate > delete。

2、在使用drop和truncate时一定要注意,虽然可以恢复,但为了减少麻烦,还是要慎重。

3、如果想删除部分数据用delete,注意带上where子句,回滚段要足够大;

如果想删除表,当然用drop;

如果想保留表而将所有数据删除,如果和事务无关,用truncate即可;

如果和事务有关,或者想触发trigger,还是用delete;

如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

更多资讯请上达梦技术社区了解: https://eco.dameng.com

达梦数据库中,模式和表空间是两个不同的概念。模式是数据库对象的集合,包括表、视图、索引等。而表空间是用来存储数据库对象的物理空间。 在达梦数据库中,可以通过创建表空间来为数据库对象提供存储空间。表空间可以分为普通表空间和混合表空间。普通表空间只能存储普通表(非HUGE表),而混合表空间既可以存储普通表又可以存储HUGE表。\[1\] 创建表空间可以使用CREATE TABLESPACE语句,可以指定表空间的数据文件路径、大小以及自动扩展的设置。例如,可以使用以下语句创建一个表空间并设置自动扩展,每次扩展1M,最大为100M: CREATE TABLESPACE TS2 DATAFILE '/mds6800/damengdb/db/DAMENG/TS2.dbf' SIZE 128 AUTOEXTEND ON NEXT 1 MAXSIZE 100;\[3\] 需要注意的是,表空间的创建、修改和删除等操作都是在数据库管理员权限下进行的。\[2\] #### 引用[.reference_title] - *1* *2* [达梦非模式对象—表空间、用户、角色、权限](https://blog.csdn.net/Nelson_S/article/details/124375902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [达梦数据库创建表空间,用户,模式](https://blog.csdn.net/qq_24011271/article/details/120101644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值