数据库系统概论 ---- 第三章 -- 关系数据库标准语言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语句。
相关文章
|
2月前
|
SQL 机器学习/深度学习 人工智能
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
本文系统性地阐述了自然语言转SQL(NL2SQL) 技术如何让非技术背景的业务分析师实现数据自助查询,从而提升数据驱动决策的效率与准确性。
从“写SQL”到“聊数据”:NL2SQL如何用自然语言解锁数据库?
|
9天前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
119 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
8天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
SQL 人工智能 Java
用 LangChain4j+Ollama 打造 Text-to-SQL AI Agent,数据库想问就问
本文介绍了如何利用AI技术简化SQL查询操作,让不懂技术的用户也能轻松从数据库中获取信息。通过本地部署PostgreSQL数据库和Ollama模型,结合Java代码,实现将自然语言问题自动转换为SQL查询,并将结果以易懂的方式呈现。整个流程简单直观,适合初学者动手实践,同时也展示了AI在数据查询中的潜力与局限。
196 8
|
2月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
128 5
|
14天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
2月前
|
SQL 容灾 安全
云时代SQL Server的终极答案:阿里云 RDS SQL Server如何用异地容灾重构系统可靠性
在数字化转型的浪潮中,数据库的高可用性已成为系统稳定性的生命线。作为经历过多次生产事故的资深开发者,肯定深知传统自建SQL Server架构的脆弱性——直到遇见阿里云 RDS SQL Server,其革命性的异地容灾架构彻底改写了游戏规则。
|
3月前
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
3月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
523 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")

热门文章

最新文章