当前位置: 首页 > news >正文

【SQL】drop、delete 与 truncate 的区别

在数据库管理中,DROPDELETETRUNCATE 是用于删除数据或表的命令,但它们有不同的用途和效果。以下是它们的详细区别:

1. DROP

DROP 语句用于删除整个数据库对象(如表、视图、索引等)。一旦对象被删除,所有的数据、结构和权限都将丢失,无法恢复。

DROP TABLE table_name;
  • 用途: 删除整个表及其所有数据、结构和权限。
  • 回滚: 不可回滚。执行后,所有数据和表定义都永久删除。
  • 速度: 非常快,因为直接删除整个表。
  • 触发器: 不会触发触发器,因为它是删除表结构而不是数据。

2. DELETE

DELETE 语句用于删除表中的数据,可以带有 WHERE 子句以指定删除特定的记录。如果没有 WHERE 子句,将删除表中的所有记录,但表的结构保留。

DELETE FROM table_name WHERE condition;
  • 用途: 删除表中满足条件的行数据。
  • 回滚: 可以回滚,如果在事务中使用。
  • 速度: 较慢,因为每行都单独删除并记录日志。
  • 触发器: 会触发触发器,因为它逐行删除数据。

3. TRUNCATE

TRUNCATE 语句用于删除表中的所有数据,但保留表的结构。它重置表的自增字段,并且不记录单独的行删除日志。

TRUNCATE TABLE table_name;
  • 用途: 快速清空表中的所有数据,同时保留表结构。
  • 回滚: 在某些数据库系统中不可回滚(如 MySQL),在支持事务的数据库系统中(如 PostgreSQL)可以回滚。
  • 速度: 非常快,因为它批量删除数据并重置表。
  • 触发器: 不会触发触发器,因为它是批量删除。

总结

  • DROP: 删除整个表和数据,不可恢复。
  • DELETE: 删除特定数据行,可恢复。
  • TRUNCATE: 删除所有数据行,保留表结构,通常不可恢复。

示例代码

// 示例:使用JDBC执行DROP、DELETE和TRUNCATEimport java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.SQLException;public class DatabaseOperations {private static final String JDBC_URL = "jdbc:mysql://localhost:3306/yourdatabase";private static final String JDBC_USER = "yourusername";private static final String JDBC_PASSWORD = "yourpassword";public static void main(String[] args) {try (Connection conn = DriverManager.getConnection(JDBC_URL, JDBC_USER, JDBC_PASSWORD);Statement stmt = conn.createStatement()) {// DROP 表String dropTableSQL = "DROP TABLE IF EXISTS yourtable";stmt.executeUpdate(dropTableSQL);System.out.println("Table dropped successfully.");// 重新创建表以便演示DELETE和TRUNCATEString createTableSQL = "CREATE TABLE yourtable (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))";stmt.executeUpdate(createTableSQL);System.out.println("Table created successfully.");// 插入一些数据String insertDataSQL = "INSERT INTO yourtable (name) VALUES ('Alice'), ('Bob'), ('Charlie')";stmt.executeUpdate(insertDataSQL);System.out.println("Data inserted successfully.");// DELETE 表数据String deleteDataSQL = "DELETE FROM yourtable WHERE name = 'Alice'";stmt.executeUpdate(deleteDataSQL);System.out.println("Data deleted successfully.");// TRUNCATE 表数据String truncateTableSQL = "TRUNCATE TABLE yourtable";stmt.executeUpdate(truncateTableSQL);System.out.println("Table truncated successfully.");} catch (SQLException e) {e.printStackTrace();}}
}

在上述代码中,演示了如何使用 JDBC 执行 DROPDELETETRUNCATE 操作。请根据需要调整数据库连接字符串、用户名、密码和 SQL 语句。

相关文章:

  • Excel中插入的图片在不同电脑上消失的问题及解决方法
  • 裁员裁到大动脉,是一种什么体验!
  • Spring (68)如何管理Spring Boot应用的配置
  • 【云岚到家】-day04-1-数据同步方案-Canal-MQ
  • 【C++题解】1713 - 输出满足条件的整数3
  • IP地址介绍
  • java 接口的
  • Hi3861 OpenHarmony嵌入式应用入门--总引导连接
  • 剖析影响大米码垛机性能的关键因素
  • EXCEL数据导入HIVE
  • QT基础 - 常见图表绘制
  • 如何通过自定义模块DIY出专属个性化的CSDN主页?一招教你搞定!
  • C语言函数是如何变成汇编的
  • 基于AT32_Work_Bench配置AT32工程
  • RocketMQ快速入门:集成spring, springboot实现各类消息消费(七)附带源码
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 2017-09-12 前端日报
  • Codepen 每日精选(2018-3-25)
  • github从入门到放弃(1)
  • Redis的resp协议
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 反思总结然后整装待发
  • 缓存与缓冲
  • 简单基于spring的redis配置(单机和集群模式)
  • 简单数学运算程序(不定期更新)
  • 老板让我十分钟上手nx-admin
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 扑朔迷离的属性和特性【彻底弄清】
  • 使用 QuickBI 搭建酷炫可视化分析
  • 小试R空间处理新库sf
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​虚拟化系列介绍(十)
  • ### RabbitMQ五种工作模式:
  • #每天一道面试题# 什么是MySQL的回表查询
  • (¥1011)-(一千零一拾一元整)输出
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)fread与fwrite详解
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (动态规划)5. 最长回文子串 java解决
  • (过滤器)Filter和(监听器)listener
  • (回溯) LeetCode 78. 子集
  • (强烈推荐)移动端音视频从零到上手(下)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .gitignore文件忽略的内容不生效问题解决
  • .NET 8 跨平台高性能边缘采集网关
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core引入性能分析引导优化
  • .Net Core中Quartz的使用方法
  • .NET 读取 JSON格式的数据
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】