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

  • 确保无论是否发生异常,资源都能被正确释放
  • 避免数据库连接泄露
相关推荐
m0_7482336414 小时前
C++ 模板初阶:从函数重载到泛型编程的优雅过渡
java·c++·算法·1024程序员节
Hyt的笔记本14 小时前
【C++】异步操作
c++·1024程序员节
薛定谔的zhu14 小时前
如何设计通用 ATS 代理销售激励系统(从业务到架构的通盘思考)
金融·1024程序员节
笑脸惹桃花14 小时前
【笑脸惹桃花】1024,阶段性回望与小结
1024程序员节
一念一花一世界14 小时前
Arbess从入门到实战(17) - 使用Arbess+GitPuk+SonarQube实现Java项目代码扫描及自动化部署
ci/cd·1024程序员节·tiklab·arbess
hour_go14 小时前
【知识图谱】图神经网络(GNN)核心概念详解:从消息传递到实战应用
笔记·深度学习·神经网络·1024程序员节
老歌老听老掉牙14 小时前
参数曲线切向量与叉乘向量的精确计算与分析
python·sympy·1024程序员节
MeowKnight95814 小时前
静态库与动态库
1024程序员节
以己之14 小时前
11.盛最多水的容器
java·算法·双指针·1024程序员节