数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)_数据库其它

数据库删除语句的分别介绍:
Delete:用于删除表中的行(注:可以删除某一行;也可以在不删除表的情况下(即意味着表的结构、属性、索引完整)删除所有行)
语法:删除某一行:Delete From 表名称 Where 列名称=值
删除所有行: Delete From 表名称 或 Delete * From 表名称

Drop:用于删除表(注:将表的结构、属性、索引也会被删除。)
语法:Drop Table 表名称
Truncate:用于删除表内的数据(注:仅删除表内的数据,不删除表本身,相当于Delete语句不写Where子句一样)
语法:Truncate Table 表名称

数据库中删除语句的相同点和不同点的比较:

相同点:

1.truncate和不带where子句的delete,以及drop都能删除表内的数据
2.truncate和delete只删除表数据保留表结构

不同点:

1. truncate table tablename

删除表内容释放表空间保留表结构(即:只删除表内的数据,不删除表本身。相当于Delete语句不写where子句一样),不使用事务处理即和事务无关

truncate 语句缺省情况下将空间释放到 minextents个 extent,
除非使用reuse storage;truncate 会将高水线复位(回到最开始)。

2. delete table tablename [where子句]

delete属于数据操作语言(DML),不能自动提交事务,需commit提交
这个操作会放到 rollback segement 中,事务提交之后才生效;
如果有相应的 trigger,执行的时候将被触发。
delete 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动

3. drop table tablename

drop属于数据定义语言(DDL)可以自动提交事务;
drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index)【删除表数据同时删除表结构】;
依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
drop 语句将表所占用的空间全部释放。
删除数据的速度,一般来说: drop> truncate > delete

使用场合:

当你不再需要该表时, 用 drop;
当你仍要保留该表,但要删除所有记录时, 用 truncate;
当你要删除部分记录时(always with a where clause), 用 delete.

注意:
对于有主外键关系的表,不能使用truncate而应该使用不带where子句的delete语句,由于truncate不记录在日志中,不能够激活触发器

作者 韩学敏

时间: 2024-10-22 13:12:16

数据库中删除语句Drop、Delete、Truncate的相同点和不同点的比较(实例说明)_数据库其它的相关文章

database-从 SQLite 数据库中删除数据

问题描述 从 SQLite 数据库中删除数据 我在程序中创建了一个 SQLite Android dB.我可以添加 info 到 dB 中,但是不能删除 dB 中的任何数据. final SQLManager hon = new SQLManager(this); b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated meth

Oracle数据库中SQL语句的优化技巧_oracle

在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化.

PowerShell中删除空格、点号、减号和换行方法代码实例

  这篇文章主要介绍了PowerShell中删除空格.点号.减号和换行方法代码实例,本文直接给出实例代码,需要的朋友可以参考下 代码如下: $text = ' ... Hello ...--- ' $text.Trim(" .-`t`n`r") 结果只显示:Hello

MySQL 数据库中删除重复记录方法总结

MYSQL数据库中,经常会遇到重复记录的情况,那么就需要SQL删除重复记录,下面为您列举了四种删除重复记录的方式,用于不同的情况,希望对您有所帮助. 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断  代码如下 复制代码 select * from people  where peopleId in (select   peopleId from   people group by   peopleId having count(peopleId) > 1)    

快速掌握MySQL数据库中SELECT语句

本文针对MySQL数据库中的SELECT语句快速精细掌握. MySQL中SELECT语句的基本语法是: 以下是引用片段:SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT|DISTINCTROW|ALL] select_list [INTO {OUTFILE|DUMPFILE} 'file_name' export_options] [FROM table_references

ORACLE数据库中怎么求除数字、字母之外的非中文字符的正则表达式_正则表达式

最近做项目,有这样一需求:ORACLE数据库中求除数字.字母之外的非中文字符的正则表达式 如有如下字段,需将其中除字母.数字.汉字外的其他所有字符替换为空 'asdfsad ,,:)()!@123234#$%^&*(我w 是e ? 中国人../\[]::''""一人' 最终得到值:asdfsad123234我是中国人一人 select FN_REG_REPLACEOTHER('asdfsad ,,:)()!@#$%^&*(我是?中国人../\[]::''"&q

MySQL数据库中删除重复记录的方法总结[推荐]_Mysql

表结构: mysql> desc demo; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(11) unsigned | NO | PRI | NULL

我用的VS2005自带的SQL为什么在数据库中删除的项目仍然不能创建同名的数据库呢?

问题描述 说XXX数据库已经存在我把目录下的数据库文件和LOG文件都删除了..... 解决方案 解决方案二:????竟然没有人会阿解决方案三:1.你的数据库是不是系统数据库.2.你要到..MicrosoftSQLServerMSSQL.2MSSQLData把这个数据库文件删掉解决方案四:来晚咯...就是你没删掉文件.解决方案五:一般还是要执行DROPDATABASE才能删除数据库吧.如果你用的SQLServer2005Express,请安装免费的SQLServerManagementStudio

AIX系统中删除指定目录、指定后缀、指定天数以前的历史文件_服务器其它

命令: find /home/oracle/admin/zhjport/udump/ -name "*.trc" -mtime +30 -exec rm {} \; 如果要自动执行可以加入CRONTAB 本文出自 "麦地坞" 博客,请务必保留此出处 AIX是什么系统 AIX吧,Advanced Interactive eXecutive(AIX)是IBM专有UNIX操作系统的商标名 aix和redhat linux的不同 1.用法都差不多,只不过AIX要比LINUX