• SQL之数据更新
  • 实现:插入数据 - INSERT INTO
  • 可以:插入元组
  • 可以:插入子查询获取元组
  • 实现:修改数据 - UPDATE SET
  • 可以:修改单元组的值
  • 可以:修改全元组的值
  • 可以:使用子查询
  • 实现:删除数据 - DELTE FROM
  • 可以:删除单元组
  • 可以:删除全部元组
  • 可以:使用子查询
  • 最后:补充说明


SQL之数据更新

文章为个人读书总结笔记 发现错误以及如果有什么建议可以及时通知我哟!

本文介绍更新数据的三大操作:插入,修改,删除

注意这边的数据指的是元组(单元组,多元组

实现:插入数据 - INSERT INTO

SQL提供INSERT INTO语句执行数据的插入

可以:插入元组

介绍插入单元组的细节

  • 格式
INSERT
INTO  <表名> [( <属性列1>[,<属性列2>]... )]
VALUES  (<常量1> [,<常量2>]... )
  • 解释
  • 常量和属性列一一对应
  • 简单说明:注意这边的一一对应(但是INTO子句后的属性列顺序可以不同于CREATE TABLE时指定的属性定义顺序
INSERT
INTO    S(Sno,Sname,Ssex,Sdept,Sage)
VALUES  ('100','小k','男','CS',20);
  • 若属性列全部列出则可以只写表名
  • 简单说明:插入的数据对应全部的列属性
INSERT
INTO    S
VALUES  ('100','小k','男','CS',20);
  • 若属性列未全部列出 (你可以选择显式指出NULL,或者将自动赋空值
  • 简单说明:Sage自动为NULL
INSERT
INTO    S(Sno,Sname,Ssex,Sdept)
VALUES  ('100','小k','男','CS');
  • 若这些列在定义时指出NOT NULL可能会出错误,要避免

可以:插入子查询获取元组

插入子查询即为插入多个元组的实现,这边将使用到SELECT-FROM-WHERE子查询, 若不熟悉的话可以参照我的另外一篇博文 ” SQL之数据查询 “

  • 插入子查询的格式:对照插入单个元组的格式来理解(子查询提供了多元组
INSERT
INTO  <表名> [( <属性列1>[,<属性列2>]... )]
子查询;
  • 例子:对于每一个Sdept,求均值,将结果存入数据库
CREATE  TABLE   Dept_age(
    Sdept   CHAR(15),
    Avg_age SMALLINT);

INSERT
INTO    Dept_age(Sdept,Avg_age)
SELECT  Sdept,AVG(Sage)
FROM    S
GROUP   BY  Sdept;
  • 执行过程
  • 子查询输出单元组Sdept及对应的均值AVG(Sage)
  • 将单元组输入到Dept_age表
  • 继续重复第一步

实现:修改数据 - UPDATE SET

参照于插入数据,依然有两种方式,即修改单元组或者修改多元组,多元组方面由子查询来实现

比较特殊的就是修改全部元组!

  • 一般格式
UPDATE    <表名>
SET   <列名>=<表达式> [,<列名>=<表达式>] ...
[WHERE <条件>]
  • SET子句
  • 由一至多个 属性-表达式 对组成,表达式取代属性的值
  • WHERE子句
  • 指出了满足的元组
  • 特殊:未写出WHERE子句,则默认全部元组均满足

可以:修改单元组的值

  • 例子:针对S表,将Sno为100的数据中,Sage属性列的值修改为18
UPDATE    S
SET   Sage=18
WHERE Sno='100';

可以:修改全元组的值

  • 例子:将所有元组的Sage属性列值增加1
UPDATE    S
SET   Sage=Sage+1;

可以:使用子查询

这边的子查询用于构造条件

  • 例子:将Sdept为’CS’的全部数据的Grade属性列全部设置为0
UPDATE    SC
SET   Grade=0
WHERE Sno IN(
SELECT  Sno
FROM    S
WHERE   Sdept='CS');

实现:删除数据 - DELTE FROM

参照修改数据,由WHERE来指定满足的元组,不写出WHERE子句则全部元组为满足元组

这边要注意的是:删除的是表中的数据,而非表的定义

关于表定义参考我的另外一篇博文 “SQL之数据定义”

  • 格式
DELETE
FROM <表名>
[WHERE    <条件>];

可以:删除单元组

  • 例子:操作S表,删除Sno为’100’的元组
DELETE
FROM  S
WHERE Sno='100';

可以:删除全部元组

  • 例子:删除SC表全部数据
DELETE
FROM  SC;

可以:使用子查询

这边的子查询也是用于构造条件

  • 例子:删除SC表中,满足Sdept为‘CS’的数据
DELETE    
FROM  SC
WHERE Sno IN(
    SELECT  Sno
    FROM    S
    WHERE   Sdept='CS');
  • 执行步骤
  • 由子查询根据满足Sdept=’CS’的条件从S表中输出Sno
  • 根据满足的Sno所有元组,从SC表中删除这些元组

最后:补充说明

插入,修改,删除均有针对单元组和多元组的操作

多元组可以由子查询来构造条件获取

  • 说明
  • 如果你以为如上介绍的那么简单,那你就错了,对于某个表的数据进行插入,修改,删除可能会破坏参照完整性
  • 不过不用担心,很快我将介绍相关的参照完整性以及如何去检查并控制它们

更多相关资料在 我的”SQL专栏” 中可以找到 !
如果文章对你有帮助的话 给我点个赞吧b( ̄▽ ̄)d !