数据库数据删除与修改实验

news2025/4/25 14:25:58

数据库数据删除与修改实验

在数据库原理的学习中,数据的删除与修改是核心操作技能。通过“删除修改数据”实验,我系统实践了 SQL 中 UPDATEDELETE 语句的多种应用场景,从基础语法到复杂业务逻辑处理,积累了丰富的实战经验。本文将详细复盘实验内容,总结关键操作要点与典型问题。

一、实验准备:环境与数据初始化

1. 软硬件环境

  • 硬件:PC 单机
  • 软件:Windows 11 + SQL Server 2022
  • 核心表
    • STUDENT057(学生表)、SCORE057(成绩表)、Course057(课程表) 、TEACHER057(教师表)

2. 数据生成

-- 创建学生实验表(复制原始数据)
SELECT * INTO STUDENTA057 FROM STUDENT057;

-- 创建成绩实验表(先过滤无效数据,再插入全量数据)
SELECT * INTO SCOREA057 FROM SCORE057 WHERE DEGREE < 0; -- 初始空表(假设无负数成绩)
INSERT INTO SCOREA057 SELECT * FROM SCORE057; -- 插入全部成绩数据

在这里插入图片描述

二、验证性实验:基础操作与语法验证

1. 数据修改(UPDATE)

(1)单表条件修改
  • 场景1:批量调整出生日期

    -- 所有人出生日期月份减1
    UPDATE STUDENTA057 
    SET Sbirthday = DATEADD(MONTH, -1, Sbirthday);
    

    在这里插入图片描述

    -- 特定学生:陈文文年份加1,班级修改
    UPDATE STUDENTA057 
    SET Sbirthday = DATEADD(YEAR, 1, Sbirthday), Class = '95033' 
    WHERE Sname = '陈文文';
    

    在这里插入图片描述

  • 场景2:分组差异化修改(CASE-WHEN)

    -- 95033班男生日期减1天,女生加1天
    UPDATE STUDENTA057 
    SET Sbirthday = CASE Ssex 
                    WHEN '男' THEN DATEADD(DAY, -1, Sbirthday)
                    WHEN '女' THEN DATEADD(DAY, 1, Sbirthday)
                    END 
    WHERE Class = '95033';
    

在这里插入图片描述

(2)多表关联修改
  • 场景3:通过学生表修改成绩表数据

    -- 李君帅所有成绩减10(JOIN关联学生与成绩表)
    UPDATE SC 
    SET Degree = Degree - 10 
    FROM STUDENTA057 S 
    JOIN SCOREA057 SC ON S.Sno = SC.Sno 
    WHERE S.Sname = '李君帅';
    

    在这里插入图片描述

    -- 李君帅的“计算机导论”成绩加10(三表JOIN)
    UPDATE SC 
    SET Degree = Degree + 10 
    FROM STUDENTA057 S 
    JOIN SCOREA057 SC ON S.Sno = SC.Sno 
    JOIN Course C ON SC.CNO = C.CNO 
    WHERE S.Sname = '李君帅' AND C.Cname = '计算机导论';
    

    在这里插入图片描述

2. 数据删除(DELETE)实战

(1)精准条件删除
  • 场景1:单条件/多条件过滤
    -- 删除学号109、课程3-245的成绩
    DELETE FROM SCOREA057 
    WHERE SNO = '109' AND CNO = '3-245';
    

在这里插入图片描述

-- 子查询定位:曾华庆的“数字电路”成绩
DELETE FROM SCOREA057 
WHERE SNO = (SELECT Sno FROM STUDENTA057 WHERE Sname = '曾华庆') 
  AND CNO = (SELECT CNO FROM Course WHERE Cname = '数字电路');

在这里插入图片描述

(2)表清空操作对比
-- 快速清空表(不可回滚,效率高)
TRUNCATE TABLE STUDENTA057;

在这里插入图片描述

-- 逐行删除(支持事务,可带WHERE)
DELETE FROM SCOREA057;

在这里插入图片描述

3. 特殊语法测试

(1)SET ANSI_NULLS:NULL值比较规则
  • ON(默认)= NULL<> 无效,必须用 IS NULL/IS NOT NULL

    SELECT * FROM SCORE057 WHERE DEGREE IS NOT NULL; -- 有效
    SELECT * FROM SCORE057 WHERE DEGREE = NULL; -- 无结果(ANSI标准)
    
  • OFF:非标准行为,= NULL 可能返回NULL值行(不推荐使用)

区别

  • ON :语句一返回结果集,语句二无结果
  • OFF:语句一和语句二都会返回结果集
(2)SET QUOTED_IDENTIFIER:标识符引号
  • ON:双引号用于标识符(需谨慎),推荐用 [](如 [CNO]
  • OFF:双引号可作字符串,但兼容性差,统一用 [] 更安全
(3)TOP WITH TIES:返回并列数据
-- 前3条记录(无排序时随机)
SELECT TOP 3 * FROM SCORE057;

在这里插入图片描述

-- 前3条及并列(需ORDER BY)
SELECT TOP 3 WITH TIES * FROM SCORE057 ORDER BY Degree DESC;

在这里插入图片描述
无order by时会出现以下报错:
在这里插入图片描述

(4)ANY/SOME/ALL:集合比较
  • ANY/SOME:满足任意一个条件(如 Degree < ANY(...) 表示小于子查询中的某个值)
  • ALL:满足所有条件(如 Degree >= ALL(...) 筛选最大值行)

三、设计性实验:复杂业务逻辑实现

1. 高阶数据修改(单语句完成)

(1)复合条件与边界控制
  • 场景1:姓名与日期同时修改

    -- 陈文文改名为陈文,出生日期年月日各加1
    UPDATE STUDENTA057 
    SET Sname = '陈文', 
        Sbirthday = DATEADD(DAY, 1, DATEADD(MONTH, 1, DATEADD(YEAR, 1, Sbirthday)))
    WHERE Sname = '陈文文';
    

    修改前
    在这里插入图片描述

    修改后
    在这里插入图片描述

  • 场景2:成绩上限控制(加10后不超过100)

    UPDATE SCOREA057 
    SET Degree = CASE 
                  WHEN Degree + 10 > 100 THEN 100 
                  ELSE Degree + 10 
                 END 
    WHERE SNO = '101';
    

    修改前
    在这里插入图片描述

    修改后
    在这里插入图片描述

(2)多表关联与分组处理
  • 场景3:按性别差异化加分(男生加10%,女生加10)

    UPDATE SC 
    SET Degree = CASE S.Ssex 
                  WHEN '男' THEN IIF(SC.Degree * 1.1 > 100, 100, SC.Degree * 1.1)
                  WHEN '女' THEN IIF(SC.Degree + 10 > 100, 100, SC.Degree + 10)
                 END 
    FROM STUDENTA057 S 
    JOIN SCOREA057 SC ON S.Sno = SC.Sno;
    

    修改前
    在这里插入图片描述

    修改后
    在这里插入图片描述

2. 复杂数据删除(多条件关联)

(1)跨表关联删除
  • 场景1:删除女生的“计算机导论”成绩
  DELETE SC 
  FROM SCOREA057 SC 
  JOIN STUDENTA057 S ON SC.Sno = S.Sno 
  JOIN Course057 C ON SC.CNO = C.CNO 
  WHERE S.Ssex = '女' AND C.Cname = '计算机导论';
   
    --也可以使用子查询
  DELETE FROM SCOREA057 WHERE
SNO = ANY(SELECT SNO FROM STUDENTA057 WHERE Ssex='女') AND
CNO = ANY (SELECT CNO FROM Course057 WHERE CNAME='计算机导论')

删除前
在这里插入图片描述

删除后
在这里插入图片描述

(2)动态条件删除(本月过生日的男同学)
-- 当前月过生日的男同学(MONTH函数匹配)
DELETE FROM STUDENTA057 
WHERE Ssex = '男' AND MONTH(Sbirthday) = MONTH(GETDATE());

删除前
在这里插入图片描述

删除后
在这里插入图片描述

四、实践中的典型问题与解决

1. 子查询返回多值错误

  • 问题SNO = (SELECT SNO FROM STUDENTA057 WHERE Ssex='女') 报错(子查询返回多个学号)
  • 解决:改用 SNO = ANY(...)IN(...),匹配集合中的任意值

2. NULL值导致的逻辑失效

  • 场景Degree >= ALL(SELECT degree FROM SCORE057) 无结果(因存在NULL值)
  • 解决:子查询添加 WHERE Degree IS NOT NULL,排除无效NULL值

五、实验总结:

1. 核心技能

  • 数据修改:掌握 UPDATE 的单表/多表操作、CASE-WHEN 条件分支、边界值控制(如成绩≤100)。
  • 数据删除:区分 DELETE(灵活过滤)与 TRUNCATE(快速清空),重视 WHERE 条件的严谨性。
  • 语法细节:理解 ANSI_NULLSQUOTED_IDENTIFIER 对SQL行为的影响,规范使用 IS NULL[] 等标准语法。

2. 实践中的“避坑”经验

  • 先测试后执行:复杂语句先通过子查询验证中间结果(如单独运行 SELECT CNO FROM Course WHERE Cname='计算机导论')。
  • 备份优先:删除/修改前备份数据,避免误操作(如 TRUNCATE 不可回滚,需谨慎)。

3. 对数据库操作的再认识

此次实验让我全面掌握了数据操作的 UPDATEDELETE 语句,学会运用函数(如 DATEADD)修改数据,也明白了 TRUNCATE TABLEDELETE 在清空表数据时的区别及适用场景。同时,对 SET ANSI_NULLSSET QUOTED_IDENTIFIER 等设置有了更深入的理解,知晓其对 NULL 值比较和标识符引号使用的影响。在多表连接与子查询的应用方面,也积累了丰富的实践经验,能够准确关联表并处理复杂查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【含文档+PPT+源码】基于SpringBoot+vue的疫苗接种系统的设计与实现

项目介绍 本课程演示的是一款 基于SpringBootvue的疫苗接种系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…

项目自动化测试

一.设计测试用例(细致全面) 二.先引入所需要的pom.xml依赖 1.selenium依赖 2.webdrivermanager依赖 3.commons-io依赖 编写测试用例–按照页面对用例进行划分,每个页面是Java文件,页面下的所有用例统一管理 三.common包(放入公用包) 类1utils 可以调用driver对象,访问url …

Python爬虫爬取图片并存储到MongoDB(注意:仅尝试存储一条空的示例数据到MongoDB,验证MongoDB的联通性)

以下是一个使用Python爬取图片并存储到MongoDB的示例实现&#xff0c;包含详细步骤说明&#xff1a; import requests from bs4 import BeautifulSoup from pymongo import MongoClient from datetime import datetime import os import re# 配置信息 mongoIP mongodb://root…

L1-1、Prompt 是什么?为什么它能“控制 AI”?

*Prompt 入门 L1-1 想象一下&#xff0c;你只需输入一句话&#xff0c;AI 就能自动为你写一篇文案、生成一份报告、甚至规划你的创业计划。这种“对话即编程”的背后魔法&#xff0c;就是 Prompt 的力量。 &#x1f50d; 一、Prompt 的定义与由来 Prompt&#xff08;提示词&am…

TIM输入捕获知识部分

越往左&#xff0c;频率越高&#xff1b;越往右&#xff0c;频率越低。【越紧凑&#xff0c;相同时间&#xff0c;次数越多】 计算频率的方法&#xff1a;测评法、测周法、中界频率。 频率的定义&#xff1a;1s内出现了多少个重复的周期 测评法就是从频率的定义出发的&#…

PCB常见封装类型

1. 电阻、电容、电感封装 2. 二极管、三极管封 3. 排阻类器件&#xff08;8脚、16脚&#xff09;封装 4. SO类器件&#xff08;间距有1.27、2.54mm等&#xff09;封装 5. QFP类器件封装&#xff08;四方扁平封装&#xff09; 结构&#xff1a;引脚分布在封装的四个侧面&#…

【Linux】调试工具gdb的认识和使用指令介绍(图文详解)

目录 1、debug和release的知识 2、gdb的使用和常用指令介绍&#xff1a; &#xff08;1&#xff09;、windows下调试的功能&#xff1a; &#xff08;2&#xff09;、进入和退出&#xff1a; &#xff08;3&#xff09;、调试过程中的相关指令&#xff1a; 3、调试究竟是在…

UML设计系列(9):开发过程中如何应用UML

传送门 UML设计系列(1)&#xff1a;状态机图 UML设计系列(2)&#xff1a;类图 UML设计系列(3)&#xff1a;时序图 UML设计系列(4)&#xff1a;用例图 UML设计系列(5)&#xff1a;系统依赖图 UML设计系列(6)&#xff1a;活动图 UML设计系列(7)&#xff1a;UML设计阶段性总…

模板方法模式:定义算法骨架的设计模式

模板方法模式&#xff1a;定义算法骨架的设计模式 一、模式核心&#xff1a;模板方法定义算法骨架&#xff0c;具体步骤延迟到子类实现 在软件开发中&#xff0c;经常会遇到这样的情况&#xff1a;某个算法的步骤是固定的&#xff0c;但具体步骤的实现可能因不同情况而有所不…

通付盾入选苏州市网络和数据安全免费体验目录,引领企业安全能力跃升

近日&#xff0c;苏州市网络安全主管部门正式发布《苏州市网络和数据安全免费体验产品和服务目录》&#xff0c;通付盾凭借其在数据安全、区块链、AI领域的创新实践和前沿技术实力&#xff0c;成功入选该目录。 作为苏州市网络安全技术支撑单位&#xff0c;通付盾将通过 “免费…

【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起

目录 一、引言 二、金仓数据库&#xff08;KingbaseES&#xff09;概述 1. 发展历程与市场地位 2. 核心技术架构 3. 金仓数据库的特点 三、金仓数据库在金融行业的应用 1. 金融行业的挑战与需求 2. 金仓数据库在金融行业的优势 3. 金仓数据库在金融行业的实际应用案例 …

C++智能指针上

一、裸指针 “裸指针”是最基础的&#xff0c;直接存储内存地址的指针类型。特点&#xff1a;①它本身没有自动的内存管理机制&#xff1a;如它不会自动释放内存&#xff0c;也不会检查是否指向有效的内存区域&#xff1b;②直接操作内存地址&#xff0c;不进行任何的边界检查&…

低代码平台开发串口调试助手

项目介绍 串口调试助手是一款用于串口通信调试的工具&#xff0c;它可以帮助开发人员发送和接收串口数据&#xff0c;主要用于嵌入式开发、工业控制、物联网设备开发等领域。 主要功能包括&#xff1a; 数据收发&#xff1a;可以实时发送和接收串口数据&#xff0c;并显示在界…

怎么配置一个kubectl客户端访问多个k8s集群

怎么配置一个kubectl客户端访问多个k8s集群 为什么有的客户端用token也访问不了k8s集群&#xff0c;因为有的是把~/.kube/config文件&#xff0c;改为了~/.kube/.config文件&#xff0c;文件设置成隐藏文件了。 按照kubectl的寻找配置的逻辑&#xff0c;kubectl找不到要访问集群…

12N60-ASEMI无人机专用功率器件12N60

编辑&#xff1a;LL 12N60-ASEMI无人机专用功率器件12N60 型号&#xff1a;12N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大漏源电流&#xff1a;12A 漏源击穿电压&#xff1a;600V 批号&#xff1a;最新 RDS&#xff08;ON&#xff09;Max&#xff1a;0.68…

长城智驾重复造轮子

左手新能源&#xff0c;右手智驾&#xff0c;这是长城当下最在意的两块业务。 从去年8月首款具备高阶智能驾驶功能SUV全新蓝山上市之后&#xff0c;长城在传播端的重点就是围绕智驾、无图方案打造智驾标签。 先是在广州国际车展上&#xff0c;整个展厅只展出全新蓝山&#xf…

continue插件实现IDEA接入本地离线部署的deepseek等大模型

文章目录 前言一、IDEA安装continue二、continue部署本地大模型三、continue聊天窗口使用deepseek R1四、continue批量接入硅基流动的模型API 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加关注哦&#xff0c;您的关注是我…

滚珠螺杆在数控机床中如何降低摩擦系数?

对数控机床这样要求加工精度高而且加工精度能保持长期稳定的设备来说是必须的&#xff0c;而且具有较低的传动阻力也同时为更高速的传动打下基础。使用滚珠螺杆&#xff0c;也是数控机床加工效率高的一个重要原因&#xff0c;为了减少数控机床的滚珠螺杆出现摩擦&#xff0c;可…

【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

Python实现技能记录系统

Python实现技能记录系统 来自网络&#xff0c;有改进。 技能记录系统界面如下&#xff1a; 具有保存图片和显示功能——允许用户选择图片保存&#xff0c;选择历史记录时若有图片可预览图片。 这个程序的数据保存在数据库skills2.db中&#xff0c;此数据库由用Python 自带的…