【数据库系统概论】第3章 SQL(三)数据更新

目录

插入数据Insert

1. 插入记录【插入元组】

2.插入子查询结果

修改数据Update

1. 修改某一个元组的值

2. 修改多个元组的值

3. 带子查询的修改语句

删除数据 delete

1. 删除某一个元组的值

2. 删除多个元组的值 

3. 带子查询的删除语句


插入数据Insert

 Insert语句用来向表中插入数据

1. 插入记录【插入元组

通过 INSERT INTO 语句来指定表和需要插入的值,确保每个值对应表的字段

-- 向指定的表插入单条数据
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

-- 向指定的表插入多条数据
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...),
       (值4, 值5, 值6, ...),
       (值7, 值8, 值9, ...);



-- 向表 "students" 插入一条数据
INSERT INTO students (id, name, age)
VALUES (1, '张三', 20);

INTO子句

没有指明任何属性列名,新插入的元组必须在每个属性列上均有指定值

没有在 INSERT INTO 语句中指定列名时,必须确保插入的值完全对应表的所有列,且顺序要严格匹配【插入的值数量和顺序必须与表的列定义完全一致】

-- 如果表有 3 列 (id, name, age),则插入时必须按顺序提供 3 个值
INSERT INTO students
VALUES (1, '张三', 20);

没有出现的属性列,新元组在这些列上将取空值

没有为某个属性列提供值,并且该列没有默认值(或没有设置 NOT NULL 约束),那么数据库会将该列的值设置为 NULL

-- 假设表 "students" 有 3 列:id, name, age, 但只插入了 id 和 name
-- 如果 "age" 列允许空值,则插入数据时,"age" 列会默认为 NULL
INSERT INTO students (id, name)
VALUES (1, '张三');

定义表时指定了相应属性列的缺省值,新元组在这些列上将取缺省值

指定了列的默认值,当插入数据时,如果某列没有显式提供值,则该列会自动取该默认值

-- 假设表 "students" 中 "age" 列有默认值 18
CREATE TABLE students (
  id INT,
  name VARCHAR(50),
  age INT DEFAULT 18
);

-- 当插入数据时,如果没有指定 "age" 的值,则会自动使用默认值 18
INSERT INTO students (id, name)
VALUES (2, '李四');

在表定义时说明了NOT NULL的属性列不能取空值 

某一列定义了 NOT NULL 约束时,插入数据时如果没有为该列提供值,数据库会报错,因为该列不能为 NULL

-- 假设 "students" 表中的 "id" 列是 `NOT NULL`
CREATE TABLE students (
  id INT NOT NULL,
  name VARCHAR(50),
  age INT
);

-- 如果插入时没有给 "id" 列提供值,将导致错误
INSERT INTO students (name, age)
VALUES ('王五', 22);  -- 这会报错,因为 "id" 列不允许为空

INTO------可以省略 

VALUES子句

提供的值必须与INTO子句匹配

-- 这里明确了插入的是 id 和 name,age 会自动取默认值或 NULL
INSERT INTO students (id, name)
VALUES (1, '张三');

VALUES 子句中提供的值必须与 INTO 子句指定的列的数量和顺序完全匹配

值的个数

VALUES 子句中提供的值的数量必须与 INTO 子句中列的数量一致。如果列名未指定,则值的数量必须与表中定义的列数一致。如果不一致,数据库会报错。

-- 假设 "students" 表有 3 列 (id, name, age)
INSERT INTO students
VALUES (1, '张三');  -- 错误,缺少 "age" 列的值

-- 正确的方式:
INSERT INTO students
VALUES (1, '张三', 20);  -- 提供了 3 个值,和表的列数一致

值的类型

 VALUES 子句中的每个值的类型必须与表中相应列的类型兼容。

如果某列是 INT 类型,那么插入的值必须是整数;如果某列是 VARCHAR 类型,插入的值应是字符串。

-- 以下是正确的插入语句:
INSERT INTO students (id, name, age)
VALUES (1, '张三', 20);

-- 错误的插入语句:
INSERT INTO students (id, name, age)
VALUES ('张三', '李四', 20);  -- 错误,'张三' 应该是整数类型(id 列)

2.插入子查询结果

当需要从一个表中选取某些数据并将它们插入到另一个表时

使用 SELECT 查询的结果作为数据插入到目标表中

INSERT INTO 目标表 (列1, 列2, ...)
SELECT 列1, 列2, ...
FROM 源表
WHERE 条件;

INSERT INTO <表名> [(<属性列1> [,<属性列2>… )]

子查询;

SELECT 语句中的列顺序必须与目标表的列顺序一致

如果目标表中所有列都需要插入数据,你可以省略列名

子查询中的数据类型要与目标表的列类型匹配:确保子查询结果的列数据类型与目标表中的列数据类型兼容。

例 :建立一个新表savg,存放每个学生的学号和平均成绩。 利用查询结果插入新表中 

-- 步骤 1: 创建新表 savg
CREATE TABLE savg (
  sno CHAR(8),        -- 学号,使用 CHAR(8) 类型,假设学号是固定长度的字符串
  average REAL        -- 平均成绩,使用 REAL 类型存储数值
);

-- 步骤 2: 插入数据到 savg 表
INSERT INTO savg (sno, average)
SELECT sno, AVG(grade) 
FROM sc 
GROUP BY sno;

关系数据库管理系统在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则

实体完整性主键值是否重复,不能是 NULL

参照完整性外键列的值必须与目标表中的主键值一致

用户定义的完整性 NOT NULL约束【确保某个列的值不能为 NULL】 ,UNIQUE约束【确保某个列中的值在表中是唯一的,允许 NULL 值存在,多个 NULL 值不会违反唯一性约束】, 值域约束 【限制列中的数据必须属于一个预定义的值范围或类型】

修改数据Update

修改操作又称为更新操作

UPDATE 语句用于修改表中已经存在的记录,根据给定的条件更新字段的值

UPDATE <表名>
SET <列1> = <新值1>, <列2> = <新值2>, ...
WHERE <条件>;
  • UPDATE 语句的功能是修改表中满足 WHERE 子句条件的元组(记录)。

  • SET 子句用于指定需要更新的列及其新的值。

  • 如果省略了 WHERE 子句,则默认修改表中所有记录

1. 修改某一个元组的值

将学生20180001的出生日期改为2001318

UPDATE Student
SET Sbirthdate = '2001-03-18'
WHERE Sno = '20180001';

SET 子句中,可以使用常量、列的值、表达式(如数学运算)或子查询来更新数据

可以同时更新表中的多个列 【用,隔开】

日期和字符串应该使用标准的单引号 ' 

2. 修改多个元组的值

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

UPDATE Student
SET Sage = Sage + 1;

没有 WHERE 子句:这条语句会修改表中所有记录的 Sage 列 

3. 带子查询的修改语句

将计算机科学与技术专业学生成绩置零

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

 执行修改操作时,系统会自动检查是否有任何操作会破坏表上已定义的完整性约束

删除数据 delete

DELETE FROM <表名>
WHERE <条件>;

DELETE FROM <表名>:指定从哪个表中删除数据 

WHERE <条件>:指定删除数据的条件。如果省略 WHERE 子句,表中所有的记录都会被删除。

1. 删除某一个元组的值

WHERE 子句可以精确地指明要删除的行

 要删除学号为 2018001 的学生记录:

DELETE FROM Student
WHERE Sno = '2018001';

2. 删除多个元组的值 

WHERE 子句中使用 ANDOR 来组合多个条件,或者使用 IN 来指定多个值

删除所有年龄(Sage)大于 21 的学生记录:

DELETE FROM Student
WHERE Sage > 21;

删除所有的学生选课记录: 

DELETE FROM SC;

没有 WHERE 子句,因此它会删除 SC 表中的所有记录(元组)。执行此语句后,SC 表将变为空表

删除表中的所有数据是不可恢复的,除非在删除前有备份

3. 带子查询的删除语句

据另一个查询的结果来决定哪些行应该被删除

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

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

总结:

  • 插入数据(INSERT):用于将新数据添加到表中,可以是单条或多条记录,也可以通过子查询插入。

  • 修改数据(UPDATE):用于更新已有数据,可以修改单个或多个字段,并支持子查询更新。

  • 删除数据(DELETE):用于删除表中的记录,支持删除单个或多个记录,也支持带子查询删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915615.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Acrobat Pro DC 2023(pdf免费转化word)

所在位置 通过网盘分享的文件&#xff1a;Acrobat Pro DC 2023(64bit).tar 链接: https://pan.baidu.com/s/1_m8TT1rHTtp5YnU8F0QGXQ 提取码: 1234 --来自百度网盘超级会员v4的分享 安装流程 打开安装所在位置 进入安装程序 找到安装程序 进入后点击自定义安装&#xff0c;这里…

VMware和CentOS 7.6 Linux操作系统的安装使用

1. 安装VMware 安装VMware之前&#xff0c;有些电脑是需要去BIOS里修改设置开启cpu虚拟化设备支持才能安装。如果运气不好在安装过程中安装不了的话就自行百度吧。 打开 VMware 的官网: https://www.vmware.com/ 点击 product&#xff0c;往下滑找到 see desktop hypeerviso…

手把手教你:如何从零开始实施一套OA办公系统!

很多朋友都吐槽说公司的各种各样的信息啊文件啊越积越多&#xff0c;导致管理起来越来越麻烦。早就跟大家说过&#xff0c;尤其是在提高工作效率、优化资源配置和促进信息共享方面&#xff0c;OA&#xff08;办公自动化&#xff09;系统发挥着不可替代的作用&#xff0c;早安排…

网页web无插件播放器EasyPlayer.js播放器返回错误 Incorrect response MIME type 的解决方式

在使用EasyPlayer.js播放器进行视频流播放时&#xff0c;尤其是在SpringBoot环境中部署静态资源时&#xff0c;可能会遇到“Incorrect response MIME type”的错误&#xff0c;这通常与WebAssembly&#xff08;WASM&#xff09;文件的MIME类型配置有关。 WASM是一种新的代码格式…

element-plus <el-date-picker>日期选择器踩坑!!!!

我怎么一上午踩两个坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;大声bb&#xff09; 原来的vue2老项目是这样写的 <el-form-item label"时间" prop"time"><el-date-pickerv-model"addForm.time"typ…

# 如何查看 Ubuntu 版本?

如何查看 Ubuntu 版本&#xff1f; 要查看‌Ubuntu版本&#xff0c;你可以通过以下几种方法&#xff1a; 1. 使用‌lsb_release 命令‌查看 使用 lsb_release -a 命令可以查看Ubuntu的详细版本信息&#xff0c;包括发行版ID、版本号以及版本代号。‌ ‌### 2、查看 /etc/is…

常用的生物医药专利查询数据库及网站(很全!)

生物医药专利信息检索是药物研发前期不可或缺的一步&#xff0c;通过对国内外生物医药专利网站信息查询&#xff0c;可详细了解其专利技术&#xff0c;进而有效降低药物研发过程中的风险。 目前主要使用的生物医药专利查询网站分为两大类&#xff0c;一个是免费生物医药专利查询…

第四节-OSI-网络层

数据链路层&#xff1a;二层--MAC地址精确定位 Ethernet 2&#xff1a; 报头长度&#xff1a;18B 携带的参数&#xff1a;D MAC /S MAC/TYPE(标识上层协议)/FCS 802.3 报头长度&#xff1a;26B 携带的参数&#xff1a;D MAC/S MAC/LLC(标识上层协议)/SNAP&#xff08;标识…

Python数据分析NumPy和pandas(二十七、数据可视化 matplotlib API 入门)

数据可视化或者数据绘图是数据分析中最重要的任务之一&#xff0c;是数据探索过程的一部分&#xff0c;数据可视化可以帮助我们识别异常值、识别出需要的数据转换以及为模型生成提供思考依据。对于Web开发人员&#xff0c;构建基于Web的数据可视化显示也是一种重要的方式。Pyth…

【前端】深入浅出 - TypeScript 的详细讲解

TypeScript 是一种静态类型编程语言&#xff0c;它是 JavaScript 的超集&#xff0c;添加了类型系统和编译时检查。TypeScript 的主要目标是提高大型项目的开发效率和可维护性。本文将详细介绍 TypeScript 的核心概念、语法、类型系统、高级特性以及最佳实践。 1. TypeScript…

查询DBA_FREE_SPACE缓慢问题

这个是一个常见的问题&#xff0c;理论上应该也算是一个bug&#xff0c;在oracle10g&#xff0c;到19c&#xff0c;我都曾经遇到过&#xff1b;今天在给两套新建的19C RAC添加监控脚本时&#xff0c;又发现了这个问题&#xff0c;在这里记录一下。 Symptoms 环境&#xff1a;…

The Internals of PostgreSQL 翻译版 持续更新...

为了方便自己快速学习&#xff0c;整理了翻译版本&#xff0c;目前翻译的还不完善&#xff0c;后续会边学习边完善。 文档用于自己快速参考&#xff0c;会持续修正&#xff0c;能力有限,无法确保正确!!! 《The Internals of PostgreSQL 》 不是 《 PostgreSQL14 Internals 》…

机器学习 ---模型评估、选择与验证(1)

目录 前言 一、为什么要有训练集与测试集 1、为什么要有训练集与测试集 2、如何划分训练集与测试集 二、欠拟合与过拟合 1、什么是欠拟合与欠拟合的原因 2、什么是过拟合与过拟合的原因 一些解决模型过拟合和欠拟合问题的常见方法&#xff1a; 解决过拟合问题&#…

一文简单了解Android中的input流程

在 Android 中&#xff0c;输入事件&#xff08;例如触摸、按键&#xff09;从硬件传递到应用程序并最终由应用层消费。整个过程涉及多个系统层次&#xff0c;包括硬件层、Linux 内核、Native 层、Framework 层和应用层。我们将深入解析这一流程&#xff0c;并结合代码逐步了解…

【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题

目录 1. 单例模式 (1) 饿汉模式 (2) 懒汉模式 1. 单线程版本 2. 多线程版本 2. 解决懒汉模式产生的线程安全问题 (1) 产生线程安全的原因 (2) 解决线程安全问题 1. 通过加锁让读写操作紧密执行 方法一 方法二 2. 处理加锁引入的新问题 问题描述 …

二叉树搜索树(下)

二叉树搜索树&#xff08;下&#xff09; 二叉搜索树key和key/value使用场景 key搜索场景 只有key作为关键码&#xff0c;结构中只需要存储key即可&#xff0c;关键码即为需要搜索到的值&#xff0c;搜索场景只需要判断 key在不在。key的搜索场景实现的二叉树搜索树支持增删查…

Web项目版本更新及时通知

背景 单页应用&#xff0c;项目更新时&#xff0c;部分用户会出更新不及时&#xff0c;导致异常的问题。 技术方案 给出版本号&#xff0c;项目每次更新时通知用户&#xff0c;版本已经更新需要刷新页面。 版本号更新方案版本号变更后通知用户哪些用户需要通知&#xff1f;…

D64【python 接口自动化学习】- python基础之数据库

day64 SQL-DQL-基础查询 学习日期&#xff1a;20241110 学习目标&#xff1a;MySQL数据库-- 133 SQL-DQL-基础查询 学习笔记&#xff1a; 基础数据查询 基础数据查询-过滤 总结 基础查询的语法&#xff1a;select 字段列表|* from 表过滤查询的语法&#xff1a;select 字段…

Unity插件-Smart Inspector 免费的,接近虚幻引擎的蓝图Tab管理

习惯了虚幻的一张蓝图&#xff0c;关联所有Tab &#xff08;才发现Unity&#xff0c;的Component一直被人吐槽&#xff0c;但实际上是&#xff1a;本身结构Unity 的GameObject-Comp结构&#xff0c;是好的不能再好了&#xff0c;只是配上 smart Inspector就更清晰了&#xff0…

2024 年Postman 如何安装汉化中文版?

2024 年 Postman 的汉化中文版安装教程