[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块中关闭资源?

  • 确保无论是否发生异常,资源都能被正确释放
  • 避免数据库连接泄露
相关推荐
金融小师妹1 天前
基于机器学习框架的上周行情复盘:非农数据与美联储政策信号的AI驱动解析
大数据·人工智能·深度学习·1024程序员节
渣渣盟1 天前
Flink分布式文件Sink实战解析
分布式·flink·scala·1024程序员节
CoderYanger1 天前
优选算法-栈:69.验证栈序列
java·开发语言·算法·leetcode·职场和发展·1024程序员节
金融小师妹3 天前
基于机器学习与深度强化学习:非农数据触发AI多因子模型预警!12月降息预期骤降的货币政策预测
大数据·人工智能·深度学习·1024程序员节
紫麦熊4 天前
react+ts+vite+tailwind+shadcn
1024程序员节
日日行不惧千万里4 天前
MediaMTX详解
1024程序员节
金融小师妹4 天前
基于LSTM-GARCH模型:三轮黄金周期特征提取与多因子定价机制解构
人工智能·深度学习·1024程序员节
自信150413057594 天前
初学者小白复盘23之——联合与枚举
c语言·1024程序员节
CoderYanger6 天前
B.双指针——3194. 最小元素和最大元素的最小平均值
java·开发语言·数据结构·算法·leetcode·职场和发展·1024程序员节
自信150413057596 天前
初学者小白复盘22之——结构体
c语言·数据结构·1024程序员节