当前位置: 首页 > wzjs >正文

工业网站模板网站建设有哪些步骤

工业网站模板,网站建设有哪些步骤,wordpress 关键词描述,文化建设的意义数据库系统概论(十三)详细讲解SQL中数据更新 前言一、数据插入1. 插入数据是什么?2.插入单条数据(插入元组)场景 1:指定部分列插入场景 2:不指定列名(插入所有列)场景 3&…

数据库系统概论(十三)详细讲解SQL中数据更新

  • 前言
  • 一、数据插入
    • 1. 插入数据是什么?
    • 2.插入单条数据(插入元组)
      • 场景 1:指定部分列插入
      • 场景 2:不指定列名(插入所有列)
      • 场景 3:插入部分列(其他列自动填默认值或空值)
    • 3. 插入多条数据
    • 4. 插入子查询结果(从其他表获取数据插入)
    • 5. 插入数据时的完整性检查
  • 二、修改数据
    • 1. 修改数据是什么?
    • 2. 基本语法
    • 3. 修改数据的三种场景
      • (1)修改某一条记录(单个元组)
      • (2)批量修改多条记录
      • (3)结合子查询修改(高级用法)
    • 4. 修改数据的注意事项
    • 5. 进阶技巧:三种等价的子查询写法
      • (1) IN子查询(最常用)
      • (2) 关联子查询(逐行匹配)
      • (3) EXISTS子查询(存在性判断)
  • 三、删除数据
    • 1. 删除数据的概念
    • 2. 基本语法
    • 3. 删除数据的三种场景
      • (1) 删除某一条记录(单个元组)
      • (2) 批量删除多条记录
      • (3) 结合子查询删除(跨表关联删除)
    • 4. 注意事项
    • 5. 进阶技巧:两种子查询写法对比
      • (1)IN子查询(推荐,简洁高效)
      • (2)关联子查询(逐行检查)


前言

  • 在前几期博客中,我们探讨了 SQL 连接查询,单表查询,嵌套查询,集合查询,基于派生表的查询技术等知识点。
  • 从本节开始,我们将深入讲解 SQL 中数据插入,修改与删除的知识点。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482


一、数据插入

1. 插入数据是什么?

插入数据 就是向数据库表中添加新的记录(一行数据),可以是 单条数据批量数据,也可以从其他表查询结果中插入数据。

2.插入单条数据(插入元组)

基本语法

INSERT INTO 表名 [(1,2, ...)] VALUES (1,2, ...);
  • 表名:要插入数据的表。
  • 列名(可选):指定要插入数据的列(顺序可以和表定义不同)。
  • VALUES:对应列的值(类型和个数必须匹配列)。

场景示例

场景 1:指定部分列插入

-- 表结构:Student(学号Sno, 姓名Sname, 性别Ssex, 出生日期Sbirthdate, 主修专业Smajor)
INSERT INTO Student (Sno, Sname, Ssex, Smajor, Sbirthdate) 
VALUES ('20180009', '陈冬', '男', '信息管理与信息系统', '2000-5-22');
  • 说明:列名顺序和表定义不同(如 Smajor 提前),但 VALUES 顺序要和列名一一对应。

场景 2:不指定列名(插入所有列)

INSERT INTO Student VALUES ('20180008', '张成民', '男', '2000-4-15', '计算机科学与技术');
  • 要求必须按表定义的列顺序,提供 所有列的值(包括默认值列)。

场景 3:插入部分列(其他列自动填默认值或空值)

-- 表结构:SC(学号Sno, 课程号Cno, 成绩Grade, 选学期Semester, 教学班Teachingclass)
INSERT INTO SC(Sno, Cno, Semester, Teachingclass) 
VALUES ('20180005', '81004', '20202', '81004-01');
  • 说明:未指定的 Grade 列会自动填 NULL(前提是该列允许为空)。

3. 插入多条数据

语法

INSERT INTO 表名 [(1,2, ...)] 
VALUES (1,2, ...), 
(3,4, ...), 
...; -- 用逗号分隔多个元组

示例

INSERT INTO SC VALUES 
('200215125', '2', 86, ...),
('200215125', '8', 77, ...),
('200215126', '2', 60, ...);
  • 优势:一次性插入多条数据,效率更高。

4. 插入子查询结果(从其他表获取数据插入)

语法

INSERT INTO 表名 [(1,2, ...)] 
子查询; -- 子查询的结果作为要插入的数据

场景示例
需求:统计每个专业学生的平均年龄,存入新表 Smajor_age

  1. 先创建目标表
    CREATE TABLE Smajor_age (Smajor VARCHAR(20), -- 专业名Avg_age SMALLINT     -- 平均年龄
    );
    
  2. 用子查询插入数据
    INSERT INTO Smajor_age(Smajor, Avg_age)
    SELECT Smajor, AVG(TIMESTAMPDIFF(YEAR, Sbirthdate, CURDATE())) -- 计算年龄差
    FROM Student
    GROUP BY Smajor; -- 按专业分组统计
    
  • 关键:子查询的列数和类型必须与 INSERT INTO 的列匹配。

5. 插入数据时的完整性检查

数据库在插入数据时会自动检查以下规则,若违反则插入失败:

  1. 实体完整性
    • 主键列(如学号)必须 唯一且非空
  2. 参照完整性
    • 外键列(如选课表的学号)必须对应另一表中存在的值(如学生表中已有的学号)。
  3. 用户定义的完整性
    • NOT NULL:非空列必须提供值(如姓名不能为空)。
    • UNIQUE:唯一列值不能重复(如身份证号)。
    • 值域约束:值必须在指定范围内(如成绩在 0-100 之间)。

二、修改数据

1. 修改数据是什么?

修改数据就是对数据库表中已存在的记录进行更新,比如改名字、调整价格、修正错误数据等

2. 基本语法

UPDATE 表名
SET1=1,2=2, ...  -- 要修改的列和新值
WHERE 条件;                -- 筛选需要修改的记录(可选)
  • SET子句:指定要修改哪些列,以及新的值。
  • WHERE子句(可选):只修改符合条件的记录;不写则修改全量数据

3. 修改数据的三种场景

(1)修改某一条记录(单个元组)

需求:把学号为 20180001 的学生出生日期改为 2001-3-18

UPDATE Student 
SET Sbirthdate = '2001-3-18' 
WHERE Sno = '20180001';
  • WHERE子句精准定位到一条记录,避免误改其他数据。

(2)批量修改多条记录

需求:给2020年第1学期选修 81002 课程的所有学生成绩减5分。

UPDATE SC 
SET Grade = Grade - 5 
WHERE Semester = '20201' AND Cno = '81002';
  • WHERE子句筛选出符合条件的多条记录,统一修改。

(3)结合子查询修改(高级用法)

需求:把计算机科学与技术专业的所有学生成绩置零。

UPDATE SC 
SET Grade = 0 
WHERE Sno IN (                 -- 关键:子查询查出目标学号SELECT Sno FROM Student WHERE Smajor = '计算机科学与技术'
);
  • 子查询先从 Student 表找出计算机专业的学生学号,再用 IN 匹配到 SC 表中对应的记录。

4. 修改数据的注意事项

  1. 安全第一:先查后改
    修改前先用 SELECT 验证 WHERE 条件是否正确,避免误改。
    例如,确认计算机专业学生:

    SELECT Sno FROM Student WHERE Smajor = '计算机科学与技术';
    
  2. 完整性约束检查
    数据库会自动验证修改后的数据是否符合规则:

    • 主键不能重复(如修改学号时,新学号不能已存在)。
    • 外键必须存在(如修改选课记录的学号,该学号必须在学生表中存在)。
    • 非空列不能改为NULL(如姓名列不允许为空)。
  3. 三种常见错误场景

    错误场景示例及后果
    忘记写WHERE子句UPDATE SC SET Grade = 0; → 全量数据的成绩都被置零!
    WHERE条件写错UPDATE SC SET Grade = 0 WHERE Cno = '81002'; → 误将其他课程成绩置零。
    子查询逻辑错误子查询查出的学号范围不对,导致修改了不该改的记录。

5. 进阶技巧:三种等价的子查询写法

针对“计算机专业学生成绩置零”需求,有三种写法:

(1) IN子查询(最常用)

UPDATE SC 
SET Grade = 0 
WHERE Sno IN (SELECT Sno FROM Student WHERE Smajor = '计算机科学与技术');

(2) 关联子查询(逐行匹配)

UPDATE SC 
SET Grade = 0 
WHERE '计算机科学与技术' = (SELECT Smajor FROM Student WHERE Student.Sno = SC.Sno);
  • 原理:逐行检查 SC 表的每条记录,通过 Sno 关联到 Student 表,判断专业是否匹配。

(3) EXISTS子查询(存在性判断)

UPDATE SC 
SET Grade = 0 
WHERE EXISTS (SELECT 1 FROM Student WHERE Student.Sno = SC.Sno AND Smajor = '计算机科学与技术'
);
  • 原理:只要存在与 SC 表当前记录 Sno 匹配且专业是计算机的学生,就修改当前记录。

三、删除数据

1. 删除数据的概念

删除数据就是从数据库表中移除已存在的记录(一行或多行),可以是单个记录、批量记录,或通过子查询关联其他表的数据进行删除。

2. 基本语法

DELETE FROM 表名 WHERE 条件;
  • FROM 子句:指定要删除数据的表。
  • WHERE 子句(可选):筛选需要删除的记录;不写则删除表中所有记录(但表结构保留,不会删表)。

3. 删除数据的三种场景

(1) 删除某一条记录(单个元组)

需求:删除学号为 20180007 的学生记录。

DELETE FROM Student WHERE Sno = '20180007';
  • 关键:用 WHERE 精准定位单条记录,避免误删。

(2) 批量删除多条记录

需求:删除所有学生的选课记录(清空表)。

DELETE FROM SC; -- 不写WHERE,删除表中所有数据
  • 注意:执行前务必确认,避免误删全表数据!

(3) 结合子查询删除(跨表关联删除)

需求:删除计算机科学与技术专业学生的所有选课记录。

DELETE FROM SC 
WHERE Sno IN ( -- 子查询先找出计算机专业学生的学号SELECT Sno FROM Student WHERE Smajor = '计算机科学与技术'
);
  • 逻辑:先从 Student 表获取目标学生的学号,再在 SC 表中删除这些学号对应的选课记录。

4. 注意事项

  1. 安全第一:先查后删
    删除前先用 SELECT 验证 WHERE 条件是否正确,避免误删。
    例如,确认计算机专业学生学号:

    SELECT Sno FROM Student WHERE Smajor = '计算机科学与技术';
    
  2. 参照完整性约束

    • 如果删除的表有外键关联其他表,可能会引发问题。
      例如:删除 Student 表中的学生记录时,若 SC 表(选课表)中存在该学生的选课记录,直接删除会报错(因为外键约束要求选课记录的学号必须存在于学生表中)。
    • 解决方案
      • 先删除子表(如 SC)中关联的记录,再删除主表(如 Student)记录。
      • 或在创建表时设置 级联删除(如 ON DELETE CASCADE),自动删除关联数据。
  3. 三种常见错误场景

    错误场景示例及后果
    忘记写WHERE子句DELETE FROM SC; → 清空整个选课表,所有学生的成绩记录丢失!
    WHERE条件写错DELETE FROM SC WHERE Cno = '81002'; → 误删其他课程的选课记录。
    跨表删除未考虑外键直接删除主表学生记录,导致子表选课记录出现“孤立数据”(外键值不存在)。

5. 进阶技巧:两种子查询写法对比

针对“删除计算机专业学生选课记录”需求,有两种等价写法:

(1)IN子查询(推荐,简洁高效)

DELETE FROM SC 
WHERE Sno IN (SELECT Sno FROM Student WHERE Smajor = '计算机科学与技术');
  • 适用场景:子查询结果是一个学号列表,直接匹配删除。

(2)关联子查询(逐行检查)

DELETE FROM SC 
WHERE '计算机科学与技术' = (SELECT Smajor FROM Student WHERE Student.Sno = SC.Sno -- 通过Sno关联两张表
);
  • 原理:逐行检查 SC 表的每条记录,通过学号关联到 Student 表,判断专业是否匹配,匹配则删除。

以上就是这篇博客的全部内容,下一篇我们将继续探索更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述


文章转载自:

http://BTD1pvz1.qmkyp.cn
http://xQhU7RCR.qmkyp.cn
http://NyDba230.qmkyp.cn
http://dDxkL2Yt.qmkyp.cn
http://7BYAPRw4.qmkyp.cn
http://PJnhOIoV.qmkyp.cn
http://tQu6Bv7L.qmkyp.cn
http://cRXPFsAy.qmkyp.cn
http://PINfkWDd.qmkyp.cn
http://WOMP2LIB.qmkyp.cn
http://dFOWMcVF.qmkyp.cn
http://Mlj34JOD.qmkyp.cn
http://XH205dw3.qmkyp.cn
http://BXvjcLPU.qmkyp.cn
http://k5QUvDQt.qmkyp.cn
http://nmoYUtqM.qmkyp.cn
http://y3YLNO18.qmkyp.cn
http://OzWlA3x1.qmkyp.cn
http://9w8O1vTY.qmkyp.cn
http://VYfRaEM4.qmkyp.cn
http://atxYd8td.qmkyp.cn
http://CC1pATk5.qmkyp.cn
http://vq1OFn6X.qmkyp.cn
http://miFtwOkG.qmkyp.cn
http://Tti6npQZ.qmkyp.cn
http://vhsQF4Uh.qmkyp.cn
http://WaJeTW76.qmkyp.cn
http://KGmSpXPZ.qmkyp.cn
http://5umH7MYZ.qmkyp.cn
http://MCDs5Pl8.qmkyp.cn
http://www.dtcms.com/wzjs/735520.html

相关文章:

  • 淘宝的网站怎么做的好处广告公司企业网站模板
  • 宿迁网站建设流程网站备案 修改
  • idea可以做网站吗建网站公司郑州
  • ajax网站网页设计和网站开发的区别
  • 企业免费网站建设哪个品牌好官网开发多少钱一个
  • wordpress 网站播放器插件域名打不开原来的网站
  • 遵义营销型网站建设网站开发总结性报告
  • 公司网站开发主要技术了解网站的建设心得
  • php构建网站如何开始造价师注册管理系统
  • 郑州网站搜索排名网站建设优化工资高不
  • 企业产品展示网站源码自己有主机怎么做论坛网站
  • 南通网站建设总结高端制造股十大龙头
  • 毕节市城乡建设局网站整合网络营销外包
  • 网站建设的平面设计wordpress 500 - 内部服务器错误
  • 深圳企业网站建设制作企业seo顾问服务公司
  • 四川住房与城乡建设厅网站做网站都需要什么软件
  • 南昌易动力网站建设公司网站建设设计指标
  • 快速做自适应网站湖南3合1网站建设公司
  • 阿里虚拟主机怎么做两个网站搞定设计在线制作
  • 做的网站必须备案苏州市工程造价信息网
  • 辽宁住房和城乡建设厅网站软文营销案例
  • 浏阳网站建设两性做受技巧视频网站
  • 东营做网站的公司wordpress新建功能页面
  • 手机版网站有必要吗免费创建网站教程
  • 为什么一个网站外链那么多最新热搜新闻事件
  • 网站开发的收获与体会巨量引擎官网
  • 网站设计原则有哪些咸阳今天的新消息
  • 推广计划名称推动防控措施持续优化
  • 做折扣的网站深圳可以做网站的公司
  • 免费微商城网站建设成品网站w灬源码伊甸3m8u