第3章 关系数据库标准语言SQL——3.5 数据更新

简介: 第3章 关系数据库标准语言SQL——3.5 数据更新

3.5  数据更新

   

     数据更新操作有三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。在SQL中有相应的三类语句。


3.5.1  插入数据


     SQL的数据插入语句insert通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组。


01 插入元组

     插入元组的insert语句的格式为

    insert into <表名> [(<属性列1> [,<属性列2>]···)]

     values (<常量1> [,<常量2>]···);


     其功能是将新元组插入指定表中。其中新元组的属性列1的值为常量1,属性列2的值为常量2,···。into子句中没有出现的属性列,新元组在这些列上将取空值。但必须注意的是,在表定义时说明了not null的属性列不能取空值,否则会出错。

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


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

insert into Student(Sno,Sname,Ssex,Sdept,Sage)
values(‘201215128’,’陈冬’,’男’,’IS’,18);


例3.70  将学生张成民的信息插入到Student表中。

insert into Student
values(‘201215126’,’张成民’,’男’ ,18,’CS’);

例3.71  插入一条选课记录(‘201215128’,‘1’)。

insert into SC(Sno,Cno)
values(‘201215128’,’1’);


    关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。

     或者:insert into SC values(‘201215128’,’1’,null);

     因为没有指明SC的属性名,在Grade列上要明确给出空值。


02 插入子查询结果

     子查询不仅可以嵌套在select语句中用以构造父查询的条件(如3.4.3小节所述),也可以嵌套在insert语句中用以生成要插入的批量数据


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

insert

into <表名> [(<属性列1>  [,<属性列2>···])]

子查询;


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

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


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;


3.5.2  修改数据


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

update <表名>

set <列名> = <表达式> [,<列名> = <表达式>]···

[where <条件>];


     其功能是修改指定表中满足where子句条件的元组。其中set子句给出<表达式>的值用于取代相应的属性列值。如果省略where子句,则表示要修改表中的所有元组。


01 修改某一个元组的值


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

update Student
set Sage = 22
where Sno = ‘201215121’;


02 修改多个元组的值


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

update Student
set Sage = Sage + 1;

03 带子查询的修改语句


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


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

update SC
set Grade = 0
where Sno in
        (select Sno
        from Student
        where Sdept = ‘CS’);



3.5.3  删除数据


     删除语句的一般格式为

     delete

     from <表名>

     [where <条件>];


     delete语句的功能是从指定表中删除满足where子句条件的所有元组。如果省略where子句则表示删除表中全部元组,但表的定义仍在字典中。也就是说,delete语句删除的是表中的数据,而不是关于表的定义。


01 删除某一个元组的值


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

delete
from Student
where Sno = ‘201215128’;


02 删除多个元组的值


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

delete
from SC;


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


03 带子查询的删除语句


     子查询同样也可以嵌套在delete语句中,用以构造执行删除操作的条件。


例3.78  删除计算机科学系所有学生的选课记录。

delete
from SC
where Sno in
        (select Sno
        from Student
        where Sdept = ‘CS’);

    对某个基本表中数据的增、删、改操作有可能会破坏参照完整性,第5章5.2节  参照完整性将详细讲解如何进行参照完整性检查和控制。


相关实践学习
体验RDS通用云盘核心能力
本次实验任务是创建一个云数据库RDS MySQL(通用云盘),并通过云服务器ECS对RDS MySQL实例进行压测,体验IO加速和IO突发带来的性能提升;并通过DMS执行DDL,将数据归档到OSS,再结合云盘缩容,体验数据归档带来的成本优势。
相关文章
|
8天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
31 11
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
22天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
21天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
1月前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
151 12
|
28天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
28天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
34 1
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。