第4章 数据更新

数据的更新处理大体可以分为插入(INSERT)、删除(DELETE)和更新(UPDATE)三类


4-1 数据的插入(INSERT语句的使用方法)

在这里插入图片描述

  • INSERT语句的基本语法

    在这里插入图片描述

    将列名和值用逗号隔开,分别括在()内,这种形式称为清单


原则上,执行一次INSERT语句会插入一行数据。因此,插入多行时,通常需要循环执行相应次数的INSERT语句,但是实际上,很多RDBMS都支持一次插入多行数据,这样的功能称为多行INSERT,使用时只需将多条VALUES子句通过逗号进行分隔排列即可,但需注意该用法不适用于Oracle,具体说明见下:

在这里插入图片描述

  • 列清单的省略

    对表进行全列INSERT时,可以省略表名后的列清单。这时VALUES子句的值会默认按照从左到右的顺序赋给每一列

  • 插入NULL

    INSERT语句中想给某一列赋予NULL值时,可以直接在VALUES子句的值清单中写入NULL

  • 插入默认值

    可以通过在创建表的CREATE TABLE语句中设置DEFAULT约束来设定默认值,其形式是DEFAULT <默认值>

    在这里插入图片描述

    • 通过显式方法插入默认值

      在VALUES子句中指定DEFAULT关键字

      在这里插入图片描述

    • 通过隐式方法插入默认值

      插入默认值时也可以不使用DEFAULT关键字,只要在列清单和值清单中省略设定了默认值的列就可以了,但是如果省略了没有设定默认值的列,该列的值就会被设定为NULL

      在这里插入图片描述

  • 从其他表中复制数据(INSERT…SELECT语句

    在这里插入图片描述

    INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何SQL语法(但是使用ORDER BY 子句并不会产生任何效果)



4-2 数据的删除(DELETE语句的使用方法)

  • DROP TABLE语句和DELETE语句

    删除数据的方法大体可以以下两种:

    1. DROP TABLE语句可以将表完全删除
    2. DELETE 语句会留下表(容器),而删除表中的全部数据
  • DELETE语句的基本语法

    在这里插入图片描述

  • 指定删除对象的DELETE语句(搜索型DELETE

    想要删除部分数据行时,可以像SELECT语句那样使用WHERE子句指定删除条件。这种指定了删除对象的DELETE语句称为搜索型DELETE

    -- 删除部分数据行的搜索型DELETE
    DELETE FROM 表名
    WHERE 条件
    

    与SELECT语句不同,DELETE语句中不能使用GROUP BY、HAVING和ORDER BY三类子句,而只能使用WHERE子句。 原因很简单,GROUP BY和HAVING是从表中选取数据时用来改变抽取数据形式的,而ORDER BY是用来指定取得结果显示顺序的。因此,在删除表中数据时它们都起不到作用

  • TRUMCATE
    在这里插入图片描述



4-3 数据的更新(UPDATE语句的使用方法)

在这里插入图片描述

  • UPDATE语句的基本语法

    -- 改变表中数据的UPDATE语句
    UPDATE 表名 SET 列名 = 表达式
    -- 将更新对象的列和更新后的值都记述在SET子句中
    
  • 指定条件的UPDATE语句(搜索型UPDATE)

    -- 更新部分数据行的搜索型UPDATE
    UPDATE 表名 SET 列名 = 表达式
    WHERE 条件
    
  • 使用UPDATE语句可以将值清空为NULL,即和INSERT一样,UPDATE语句也可以将NULL作为一个值来使用(但只限于未设置NOT NULL约束和主键约束的列)

  • 多列更新 —— UPDATE语句的SET子句支持同时将多个列作为更新对象

    在这里插入图片描述

    实际应用中通常都会使用第一种方法,因为方法2在某些DBMS中是无法使用的



4-4 事务

在这里插入图片描述

  • 什么是事务(transaction)
    在RDBMS中,事务是对表中数据进行更新的单元。简单来说,事务就是需要在同一个处理单元中执行的一系列更新处理的集合;

    一个事务中包含多少个更新处理或者包含哪些处理,在DBMS中并没有固定的标准,而是根据用户的要求决定的

  • 创建事务

    -- 事务的语法
    事务开始语句;
    	DML语句1;
    	DML语句2;
    	DML语句3;
    		...
    事务结束语句(COMMIT或者ROLLBACK);
    
    -- 使用事务开始和事务结束语句,将一系列DML语句(INSERT/UPDATE/DELETE语句)括起来,就实现了一个事务处理
    
    -- 需要特别注意事务的开始语句,实际上,在标准SQL中并没有定义事务的开始语句,而是由各个DBMS自己来定义的,比较有代表性的语法如下:
    -- SQL Server、PostgreSQL
    BEGIN TRANSACTION
    -- MySQL
    START TRANSACTION
    -- Oracle、DB2-- 事务结束语句只有COMMIT和ROLLBACK两种,在所有的RDBMS中都是通用的
    

在这里插入图片描述

  • COMMIT——提交处理

    COMMIT是提交事务包含的全部更新处理的结束指令,相当于文件处理中的覆盖保存,一旦提交,就无法恢复到事务开始前的状态了

  • ROLLBACK——取消处理

    ROLLBACK是取消事务包含的全部更新处理的结束指令,相当于文件处理中的放弃保存,一旦回滚,数据库就会恢复到事务开始之前的状态

    在这里插入图片描述

  • 事务处理何时开始


    在这里插入图片描述


  • ACID特性

    DBMS的事务都遵循四种特性,将这四种特性的首字母结合起来统称为ACID特性。这是所有DBMS都必须遵守的规则

    • 原子性(Atomicity)

      原子性是指事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行,也就是要么占有一切要么一无所有

    • 一致性(Consistency)

      一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者NOT NULL约束等。例如,设置了NOT NULL约束的列是不能更新为NULL的,试图插入违反主键约束恶记录就会出错,无法执行。对事务来说,这些不合法的SQL会被回滚。也就是说,这些SQL处理会被取消,不会执行

      在这里插入图片描述

    • 隔离性(Isolation)

      隔离性指的是保证不同事务之间互不干扰的特性。该特性保证了事务之间不会互相嵌套。此外,在某个事务中进行的更改,在该事务结束之前,对其他事务而言是不可见的。 因此,即使某个事务向表中添加了记录,在没有提交之前,其他事务也是看不到新添加的记录的

    • 持久性(Durability)

      持久性也可以称为耐久性,指的是在事务(无论是提交还是回滚)结束后,DBMS能够保证该时间点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复。

      如果不能保证持久性,即使是正常提交结束的事务,一旦发生了系统故障,也会导致数据丢失,一切都需要从头再来。

      保证持久性的方法根据实现的不同而不同,其中最常见的就是将事务的执行记录保存到硬盘等存储介质中(该执行记录称为日志)。当发生故障时,可以通过日志恢复到故障发生前的状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值