[MySQL]表——删除数据

文章目录

如有错误,请指正!!!

一、引言:为什么需要关注删除操作?

在数据库的CRUD(增删改查)操作中,删除操作是最具风险的一环。一个不小心就可能导致重要数据永久丢失。作为Java开发者,掌握如何使用JDBC安全地执行删除操作是必备技能。

删除操作的特殊性:

  • 不可逆性(在没有备份的情况下)
  • 可能影响数据完整性
  • 涉及业务逻辑复杂性

主要关键字:
删除数据
DELETE 表名 [WHERE 条件]

二、环境准备

2.1 技术栈要求

  • Java 8+
  • MySQL 5.7+
  • MySQL Connector/J 8.0+
  • IntelliJ IDEA

2.2 测试数据表

首先创建测试用的数据表:

sql 复制代码
-- 创建数据库
CREATE DATABASE IF NOT EXISTS user;
USE user;

-- 创建学生表
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT NOT NULL
);

-- 插入测试数据
INSERT INTO students (name, age) VALUES 
('张三', 20),
('李四', 22),
('王五', 19),
('赵六', 21),
('钱七', 23);

三、基础删除操作代码解析

让我们从最基本的删除操作开始,逐步分析代码的每个部分:

java 复制代码
package org.example;

import java.sql.*;

/**
 * JDBC数据删除操作示例
 */
public class JdbcDeleteDemo {

    private static final String URL = "jdbc:mysql://127.0.0.1:3306/user?useSSL=false&serverTimezone=UTC";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";

    public static void main(String[] args) {
        deleteStudentById(3); // 删除id为3的学生记录
    }

    /**
     * 根据ID删除学生记录
     * @param id 学生ID
     */
    public static void deleteStudentById(int id) {
        Connection conn = null;
        Statement stmt = null;

        try {
            // 1. 建立数据库连接
            conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

            // 2. 创建Statement对象
            stmt = conn.createStatement();

            // 3. 执行DELETE语句
            String sql = "DELETE FROM students WHERE id = " + id;
            int affectedRows = stmt.executeUpdate(sql);

            // 4. 处理删除结果
            if (affectedRows > 0) {
                System.out.println("成功删除 " + affectedRows + " 条记录");
            } else {
                System.out.println("未找到ID为 " + id + " 的记录,删除失败");
            }

        } catch (SQLException e) {
            System.err.println("删除操作失败:" + e.getMessage());
            e.printStackTrace();
        } finally {
            // 5. 关闭资源
            try {
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

四、代码逐行详解

4.1 数据库连接配置

java 复制代码
private static final String URL = "jdbc:mysql://127.0.0.1:3306/user?useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "123456";

参数说明:

  • URL:数据库连接字符串
  • jdbc:mysql://:JDBC连接协议
  • 127.0.0.1:3306:MySQL服务器地址和端口
  • user:数据库名
  • useSSL=false:禁用SSL(开发环境)
  • serverTimezone=UTC:设置时区,避免时间错误

4.2 建立数据库连接

java 复制代码
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);

DriverManager.getConnection()方法用于建立与数据库的连接,返回Connection对象。

4.3 创建Statement对象

java 复制代码
stmt = conn.createStatement();

Statement对象用于执行静态SQL语句。

4.4 执行DELETE语句

java 复制代码
String sql = "DELETE FROM students WHERE id = " + id;
int affectedRows = stmt.executeUpdate(sql);

关键点:

  • executeUpdate():用于执行INSERT、UPDATE、DELETE等操作
  • 返回值:受影响的行数
  • 如果返回0,表示没有找到匹配的记录

4.5 处理删除结果

java 复制代码
if (affectedRows > 0) {
    System.out.println("成功删除 " + affectedRows + " 条记录");
} else {
    System.out.println("未找到ID为 " + id + " 的记录,删除失败");
}

通过判断affectedRows的值,我们可以知道操作是否成功执行。

4.6 资源释放

java 复制代码
finally {
    try {
        if (stmt != null) stmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

为什么要在finally块中关闭资源?

  • 确保无论是否发生异常,资源都能被正确释放
  • 避免数据库连接泄露
相关推荐
叼烟扛炮7 分钟前
Linux 学习笔记(三十一):线程概念、底层分页机制与初体验
linux·运维·服务器·笔记·学习·1024程序员节
keyipatience14 分钟前
TS学习(3)交叉类型与泛型深度解析
1024程序员节
嘶哈哈哈15 分钟前
PX4 使用 MTF-01 光流测距一体传感器:接线、参数配置与室内定点
1024程序员节
茉莉玫瑰花茶16 分钟前
线性代数 [ 矩阵与线性变化 ]
线性代数·math·1024程序员节
m0_6399069422 分钟前
JVM 垃圾回收 GC 全解|判断对象死亡、GC 算法、4 种引用、CMS/G1/ZGC 收集器详解
1024程序员节
淡海水43 分钟前
07-04-源码-.NET Core GC清扫与压缩
unity·架构·c#·.netcore·gc·1024程序员节
深频率1 小时前
上线一年就撤:微软关掉Outlook的AI邮件助理
人工智能·1024程序员节
橙光成长3 小时前
PDF离线工具箱深度解析:4MB纯前端单文件,40+功能全本地运行,文件绝不上传
前端·pdf·1024程序员节
可爱系程序猿6 小时前
佳能 MF645Cx Windows 11 驱动下载安装:UFR II 队列可打印但扫描入口缺失的排查
程序人生·电脑·1024程序员节
irislinAmelia9 小时前
缺陷检测AI关键点在哪
人工智能·嵌入式硬件·1024程序员节