数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.5-3.7)(一)

简介: 数据库系统概论 ---- 第三章 -- 关系数据库标准语言SQL(3.5-3.7)

使用的数据库为MySQL

3.5 数据更新

数据更新的操作有三种:

  • 插入
  • 修改
  • 删除

3.5.1 插入数据

SQL的数据插入语句INSERT有两种形式:

  • 插入一个元组
  • 插入子查询结果(一次插入多个元组)

1. 插入元组

插入元组的INSERT语句的格式:

INSERT INTO 表名 [ 属性列1[, 属性列2]... ]
VALUES ( 常量1[, 常量2]... )
    [, ( 常量1[, 常量2]... )];
  • 其功能是将新元组插入指定表中。
  • 其中新元组的属性列1的值为常量1,属性列2的值为常量2,…。

INTO子句中没有出现的属性列,新元组在这些列上将取空值。但必须注意的是,在表定义时说明了NOT NULL的属性列不能取空值,否则会出错

如果 INTO子句中没有指明任何属性列名,则新插入的元组必须在每个属性列上均有值

例:将一个新学生元组(学号:201215128,姓名:陈冬,性别:男,所在系:IS,年龄:18岁)插入到 Student表中。

INSERT INTO Student(Sno, Sname, Ssex, Sage, Sdept)
VALUES ('201215128', '陈东', '男', 18, 'IS');
SELECT * FROM Student;

在 INTO子句中指出了表名Student,并指出了新增加的元组在哪些属性上要赋值属性的顺序可以与CREATE TABLE中的顺序不一样

VALUES子句对新元组的各属性赋值,字符串常数要用单引号(英文符号)括起来

注意:

- VALUES字句提供的值必须与INTO字句相匹配

- 值的个数要与INTO字句相同

- 值的类型要与INTO中对应的属性列相同

2. 插入子查询的结果

子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在 INSERT 语句中用以生成要插入的批量数据

插入子查询结果的INSERT语句格式为:

INSERT INTO 表名 [ 属性列1[, 属性列2]... ]
子查询;

注意,子查询的目标列必须与INTO字句相匹配( 值的个数,值的类型 )

例:对每一个系,求学生的平均年龄,并把结果存入数据库。

首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生平均年龄。

CREATE TABLE Dept_age (
    Sdept CHAR(15),
    Avg_age SMALLINT
);

然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中。

INSERT INTO Dept_age(Sdept, Avg_age)
SELECT Sdept, AVG(Sage)
FROM Student
GROUP BY Sdept;
SELECT * FROM Dept_age;

3.5.2 修改数据

修改操作又称为更新操作,其语句的一般格式为:

UPDATE 表名
SET 列名 = 表达式 [,列名 = 表达式] ...
[WHERE 条件];
  • 其功能是修改指定表中满足WHERE子句条件的元组。
  • 其中 SET子句给出 表达式 的值用于取代相应的属性列值。
  • 如果省略WHERE子句,则表示要修改表中的所有元组

1. 修改某一个元组的值

[例3.73] 将学生201215121的年龄改为22岁。

UPDATE Student
SET Sage = 22
WHERE Sno = '201215121';
SELECT Sno, Sage
FROM Student
WHERE Sno = '201215121';

2. 修改多个元组的值

[例3.74] 将所有学生的年龄增加1岁。

UPDATE Student
SET Sage = Sage+1;
SELECT Sno, Sage
FROM Student;

3. 带子查询的修改语句

子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。

[例3.75] 将计算机科学系全体学生的成绩置零。

UPDATE SC
SET Grade = 0
WHERE Sno IN (
    SELECT Sno
    FROM Student
    WHERE Sdept = 'CS'
    );
SELECT SC.Sno, Sdept, Grade
FROM SC,Student
WHERE SC.Sno = Student.Sno;

3.5.3 删除数据

删除语句的一般格式为:

DELETE FROM 表名
[WHERE 条件];
  • DELETE语句的功能是从指定表中删除满足WHERE子句条件的所有元组
  • 如果省略WHERE子句则表示删除表中全部元组,但表的定义仍在字典中。
  • DELETE语句删除的是表中的数据,而不是关于表的定义。

1. 删除某一个元组的值

[例3.76]删除学号为201215128的学生记录。

DELETE FROM Student
WHERE Sno = '201215128';
SELECT * FROM Student;

2. 删除多个元组的值

[例3.77] 删除所有的学生选课记录。

DELETE FROM SC;
SELECT * FROM SC;

  • 这条DELETE 语句将使SC 成为空表,它删除了SC的所有元组。

相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
6月前
|
SQL 存储 关系型数据库
RDS for MySQL的SQL分类与数据类型
小明需在MySQL中管理商品信息,使用SQL完成业务操作。SQL分为DQL(查询)、DML(增删改)、DDL(定义)、DCL(权限控制)和TCL(事务)五大类。DDL用于创建、修改和删除数据库结构,DML处理数据,DCL控制权限,TCL管理事务,DQL则用于查询数据。MySQL有多种数据类型,如数值型(整数、小数)、日期型和字符串型等,选择合适的数据类型是高效开发的关键。
66 0
|
3月前
|
SQL 关系型数据库 数据库
数据库空间之谜:彻底解决RDS for SQL Server的空间难题
【8月更文挑战第16天】在管理阿里云RDS for SQL Server时,合理排查与解决空间问题是确保数据库性能稳定的关键。常见问题包括数据文件增长、日志文件膨胀及索引碎片累积。利用SQL Server的动态管理视图(DMV)可有效监测文件使用情况、日志空间及索引碎片化程度。例如,使用`sp_spaceused`检查文件使用量,`sys.dm_db_log_space_usage`监控日志空间,`sys.dm_db_index_physical_stats`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
76 2
|
3月前
|
关系型数据库 数据库 数据安全/隐私保护
"告别繁琐!Python大神揭秘:如何一键定制阿里云RDS备份策略,让数据安全与效率并肩飞,轻松玩转云端数据库!"
【8月更文挑战第14天】在云计算时代,数据库安全至关重要。阿里云RDS提供自动备份,但标准策略难以适应所有场景。传统手动备份灵活性差、管理成本高且恢复效率低。本文对比手动备份,介绍使用Python自定义阿里云RDS备份策略的方法,实现动态调整备份频率、集中管理和智能决策,提升备份效率与数据安全性。示例代码演示如何创建自动备份任务。通过自动化与智能化备份管理,支持企业数字化转型。
92 2
|
3月前
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
80 0
|
4月前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
消息中间件 关系型数据库 Serverless
函数计算产品使用问题之如何通过vpc来连接rds数据库
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
关系型数据库 数据管理 数据库
数据管理DMS产品使用合集之如何极速恢复RDS(关系型数据库服务)中的数据表
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
112 3
|
4月前
|
关系型数据库 数据库 RDS
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
利用DTS将自建mysql5.7版本数据库迁移至对应rds报错
149 0
|
5月前
|
关系型数据库 MySQL 测试技术
《阿里云产品四月刊》—瑶池数据库微课堂|RDS MySQL 经济版 vs 自建 MySQL 性能压测与性价比分析
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代