数据库数据删除与修改实验
数据库数据删除与修改实验
在数据库原理的学习中,数据的删除与修改是核心操作技能。通过“删除修改数据”实验,我系统实践了 SQL 中 UPDATE
和 DELETE
语句的多种应用场景,从基础语法到复杂业务逻辑处理,积累了丰富的实战经验。本文将详细复盘实验内容,总结关键操作要点与典型问题。
一、实验准备:环境与数据初始化
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_NULLS
、QUOTED_IDENTIFIER
对SQL行为的影响,规范使用IS NULL
、[]
等标准语法。
2. 实践中的“避坑”经验
- 先测试后执行:复杂语句先通过子查询验证中间结果(如单独运行
SELECT CNO FROM Course WHERE Cname='计算机导论'
)。 - 备份优先:删除/修改前备份数据,避免误操作(如
TRUNCATE
不可回滚,需谨慎)。
3. 对数据库操作的再认识
此次实验让我全面掌握了数据操作的 UPDATE
和 DELETE
语句,学会运用函数(如 DATEADD
)修改数据,也明白了 TRUNCATE TABLE
与 DELETE
在清空表数据时的区别及适用场景。同时,对 SET ANSI_NULLS
和 SET QUOTED_IDENTIFIER
等设置有了更深入的理解,知晓其对 NULL 值比较和标识符引号使用的影响。在多表连接与子查询的应用方面,也积累了丰富的实践经验,能够准确关联表并处理复杂查询。
相关文章:

数据库数据删除与修改实验
数据库数据删除与修改实验 在数据库原理的学习中,数据的删除与修改是核心操作技能。通过“删除修改数据”实验,我系统实践了 SQL 中 UPDATE 和 DELETE 语句的多种应用场景,从基础语法到复杂业务逻辑处理,积累了丰富的实战经验。本…...

【含文档+PPT+源码】基于SpringBoot+vue的疫苗接种系统的设计与实现
项目介绍 本课程演示的是一款 基于SpringBootvue的疫苗接种系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…...
如何将IDP映射属性添加,到accountToken中 方便项目获取登录人信息
✅ 目标 你想要: 用户通过 IdP 登录(SAML 或 OAuth2)Keycloak 自动将 IdP 返回的属性(如:email、name、role 等)映射到用户账户中并把这些属性加入到用户登录返回的 Access Token 中,供业务系…...

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

Python爬虫爬取图片并存储到MongoDB(注意:仅尝试存储一条空的示例数据到MongoDB,验证MongoDB的联通性)
以下是一个使用Python爬取图片并存储到MongoDB的示例实现,包含详细步骤说明: import requests from bs4 import BeautifulSoup from pymongo import MongoClient from datetime import datetime import os import re# 配置信息 mongoIP mongodb://root…...
Unocss 类名基操, tailwindcss 类名
这里只列出 unocss 的可实现类名,tailwindcss 可以拿去试试用 1. 父元素移入,子元素改样式 <!-- 必须是 group 类名 --> <div class"group"><div class"group-hover:color-red">Text</div> </div>2…...
Sharding-JDBC 系列专题 - 第七篇:Spring Boot 集成与 Sharding-Proxy 简介
Sharding-JDBC 系列专题 - 第七篇:Spring Boot 集成与 Sharding-Proxy 简介 本系列专题旨在帮助开发者全面掌握 Sharding-JDBC,一个轻量级的分布式数据库中间件。本篇作为系列的第七篇文章,将重点探讨 Sharding-JDBC 与 Spring Boot 的集成,以及 Sharding-Proxy 的基本概念…...
微服务划分的思考
为什么 微服务不是十全十美的,不是银弹,是什么原因导致必须要做微服务划分,是否有足够的动机支撑,是项目需要,还是领导的想法,公司层面是否有相应的规划。 拆分后的服务谁来维护,研发同学是否愿意参与 为什么,思考清楚了,接下来看还需要考虑怎么做 单体应用的不足…...

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

TIM输入捕获知识部分
越往左,频率越高;越往右,频率越低。【越紧凑,相同时间,次数越多】 计算频率的方法:测评法、测周法、中界频率。 频率的定义:1s内出现了多少个重复的周期 测评法就是从频率的定义出发的&#…...
Ubuntu使用war包部署Jenkins并通过systemcl管理
目录 一、当前系统环境 二、安装Java 二、安装Jenkins 三、使用systemctl管理 一、当前系统环境 操作系统:ubuntu 24.04 Jenkins版本:2.506 格式:war JDK版本:OpenJDK_17 二、安装Java 1.下载jdk安装包 # wget下载 wget …...

PCB常见封装类型
1. 电阻、电容、电感封装 2. 二极管、三极管封 3. 排阻类器件(8脚、16脚)封装 4. SO类器件(间距有1.27、2.54mm等)封装 5. QFP类器件封装(四方扁平封装) 结构:引脚分布在封装的四个侧面&#…...
济南国网数字化培训班学习笔记-第二组-3节-电网工程建设项目部门
电网工程建设项目部 组成 监理项目部 履行监理合同,监理单位派驻:负责合同管理,审查,见证,旁站,巡视,验收,控制进度,安全,质量,协调各方 造价…...

【Linux】调试工具gdb的认识和使用指令介绍(图文详解)
目录 1、debug和release的知识 2、gdb的使用和常用指令介绍: (1)、windows下调试的功能: (2)、进入和退出: (3)、调试过程中的相关指令: 3、调试究竟是在…...
Vue3 ref与props
ref 属性 与 props 一、核心概念对比 特性ref (标签属性)props作用对象DOM 元素/组件实例组件间数据传递数据流向父组件访问子组件/DOM父组件 → 子组件响应性直接操作对象单向数据流(只读)使用场景获取 DOM/调用子组件方法组件参数传递Vue3 变化不再自…...

UML设计系列(9):开发过程中如何应用UML
传送门 UML设计系列(1):状态机图 UML设计系列(2):类图 UML设计系列(3):时序图 UML设计系列(4):用例图 UML设计系列(5):系统依赖图 UML设计系列(6):活动图 UML设计系列(7):UML设计阶段性总…...
Linux之安装配置Nginx
Linux系统下安装配置Nginx的详细步骤如下: 一、准备工作 系统环境:确保Linux系统已安装,并且具有网络连接(以便在线安装依赖或下载Nginx)。 安装依赖:Nginx依赖于一些开发库和工具,如gcc、pcr…...
【C++】STL之deque
deque Deque 的底层既不直接依赖 vector 也不依赖 list,而是结合了两者的思想,采用了一种分块(chunk)存储与动态指针数组(map)结合的结构。以下是详细分析: 1. 底层结构设计 Deque 的核心设计…...

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

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

【金仓数据库征文】加速数字化转型:金仓数据库在金融与能源领域强势崛起
目录 一、引言 二、金仓数据库(KingbaseES)概述 1. 发展历程与市场地位 2. 核心技术架构 3. 金仓数据库的特点 三、金仓数据库在金融行业的应用 1. 金融行业的挑战与需求 2. 金仓数据库在金融行业的优势 3. 金仓数据库在金融行业的实际应用案例 …...
音频base64
音频 Base64 是一种将二进制音频数据(如 MP3、WAV 等格式)编码为 ASCII 字符串的方法。通过 Base64 编码,音频文件可以转换为纯文本形式,便于在文本协议(如 JSON、XML、HTML 或电子邮件)中传输或存储&#…...
Qt C++/Go/Python 面试题(持续更新)
目录 1、封装、继承、多态是什么? 2、final标识符的作用是什么? 3、介绍一下虚函数 4、介绍一下智能指针 5、介绍一下左值、右值、左值引用、右值引用 6、指针和引用有什么区别? 7、define和const的区别是什么? 8、C程序的…...
VMware 虚拟机镜像资源网站
常见的 VMware 虚拟机镜像资源网站 网站名称链接地址特点OSBoxes.orgOSBoxes - Virtual Machines for VirtualBox & VMware 提供 .vmx .vmdk,适合 VMware 和 VirtualBox,更新频率高,界面清晰LinuxVMImages.comLinux VM Images - Downlo…...

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

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

怎么配置一个kubectl客户端访问多个k8s集群
怎么配置一个kubectl客户端访问多个k8s集群 为什么有的客户端用token也访问不了k8s集群,因为有的是把~/.kube/config文件,改为了~/.kube/.config文件,文件设置成隐藏文件了。 按照kubectl的寻找配置的逻辑,kubectl找不到要访问集群…...
C语言分支结构详解
一、引言 在 C 语言中,分支结构是程序控制流的重要组成部分。它允许程序根据不同的条件执行不同的代码块,从而实现更灵活和复杂的逻辑。分支结构使得程序能够根据输入、变量的值或其他条件来做出决策,决定程序的执行路径。 二、if 语句 基…...
Redisson实战:分布式系统中的五大典型应用场景
引言 在分布式系统架构中,数据一致性、高并发控制和资源协调是开发者面临的核心挑战。Redisson作为基于Redis的Java客户端,不仅提供了丰富的分布式对象和服务,还简化了分布式场景下的编程模型。本文将通过实际代码示例,解析Redis…...

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