数据库系统概论 ---- 第三章 -- 关系数据库标准语言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的所有元组。

相关实践学习
MySQL数据库快速部署实践
本场景主要介绍如何在一台配置了CentOS 7.7版本的ECS实例(云服务器)上安装mysql,执行mysql的常用操作,学习基本的SQL语句。
相关文章
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1356 152
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
977 156
|
9月前
|
SQL 容灾 安全
云时代SQL Server的终极答案:阿里云 RDS SQL Server如何用异地容灾重构系统可靠性
在数字化转型的浪潮中,数据库的高可用性已成为系统稳定性的生命线。作为经历过多次生产事故的资深开发者,肯定深知传统自建SQL Server架构的脆弱性——直到遇见阿里云 RDS SQL Server,其革命性的异地容灾架构彻底改写了游戏规则。
|
SQL 存储 关系型数据库
RDS for MySQL的SQL分类与数据类型
小明需在MySQL中管理商品信息,使用SQL完成业务操作。SQL分为DQL(查询)、DML(增删改)、DDL(定义)、DCL(权限控制)和TCL(事务)五大类。DDL用于创建、修改和删除数据库结构,DML处理数据,DCL控制权限,TCL管理事务,DQL则用于查询数据。MySQL有多种数据类型,如数值型(整数、小数)、日期型和字符串型等,选择合适的数据类型是高效开发的关键。
322 0
|
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`识别索引碎片。同时,合理的备份策略和文件组设置也有助于优化空间使用,确保数据库高效运行。
422 2
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
370 6
|
SQL 数据库 开发者
|
SQL 关系型数据库 数据库
阿里云数据库 RDS SQL Server版实战【性能优化实践、优点探析】
本文探讨了Amazon RDS SQL Server版在云数据库中的优势,包括高可用性、可扩展性、管理便捷、安全性和成本效益。通过多可用区部署和自动备份,RDS确保数据安全和持久性,并支持自动扩展以适应流量波动。可视化管理界面简化了监控和操作,而数据加密和访问控制等功能保障了安全性。此外,弹性计费模式降低了运维成本。实战应用显示,RDS SQL Server版能有效助力企业在促销高峰期稳定系统并保障数据安全。阿里云的RDS SQL Server版还提供了弹性伸缩、自动备份恢复、安全性和高可用性功能,进一步优化性能和成本控制,并与AWS生态系统无缝集成,支持多种开发语言和框架。
|
8月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
517 158
|
8月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。