MICK-SQL基础教程(第二版)第四章 数据更新

第四章 数据更新

数据的插入(INSERT)

INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
  • 表名后面的列清单和 VALUES 子句中的值清单的列数必须保持一致。如下所示,列数不一致时会出错,无法插入数据。
  • 此外,原则上,执行一次INSERT 语句会插入一行数据。因此, 插入多行时,通常需要循环执行相应次数的 INSERT 语句。

列清单的省略

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

插入NULL

INSERT 语句中想给某一列赋予 NULL 值时,可以直接在 VALUES 子句的值清单中写入 NULL。
但是,想要插入 NULL 的列一定不能设置 NOT NULL 约束。向设置 了NOT NULL 约束的列中插入 NULL 时,INSERT 语句会出错,导致 数据插入失败。
插入失败指的是希望通过INSERT 语句插入的数据无法正常插入到 表中,但之前已经插入的数据并不会被破坏。

插入默认值(初始值)

CREATE TABLE ProductIns 
(product_id CHAR(4) NOT NULL,  
 sale_price INTEGER DEFAULT 0, -- 销售单价的默认值设定为0; 
PRIMARY KEY (product_id));

通过显式方法插入默认值

在 VALUES 子句中指定 DEFAULT 关键字.

《MICK-SQL基础教程(第二版)第四章 数据更新》 图1.png

通过隐式方法插入默认值

插入默认值时也可以不使用DEFAULT 关键字,只要在列清单和 VALUES 中省略设定了默认值的列就可以了
如果省略了没有设定默认值的 列,该列的值就会被设定为NULL。因此,如果省略的是设置了NOT NULL 约束的列,INSERT 语句就会出错。

《MICK-SQL基础教程(第二版)第四章 数据更新》 图2.png

从其他表中复制数据

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

数据的删除(DELETE)

DROP TABLE语句和DELETE语句

删除数据的方法大体可以分为以下两种。

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

DELETE语句的基本语法

DELETE FROM <表名>;

DELETE语句的删除对象并不是表或者列,而是记录(行)。

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

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

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

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

UPDATE语句的基本语法

UPDATE <表名>   
SET <列名> = <表达式> ,<列名2> = <表达式2>...;

指定条件的UPDATE语句(搜索型UPDATE)

UPDATE <表名>   
SET <列名1> = <表达式1> ,<列名2> = <表达式2>...
WHERE <条件>;

使用NULL进行更新

使用UPDATE 也可以将列更新为NULL(该更新俗称为NULL 清 空)。此时只需要将赋值表达式右边的值直接写为 NULL 即可.
只有未设置NOT NULL 约束和主键约束的列才可以清空为 NULL。如果将设置了上述约束的列更新为NULL,就会出错,这点与 INSERT 语句相同。

事务

什么是事务

事务就是需要在同一个处理单元中执行的一系列更新处理的集合。
遇到需要在同一个处理单元中执行一系列更新操作的情况,一定要使用事务来进行处理。

创建事务

事务开始语句;
    DML语句①;    
    DML语句②;    
    DML语句③;       
    ... 
事务结束语句(COMMIT或者ROLLBACK);

使用事务开始语句和事务结束语句,将一系列 DML 语句(INSERT/ UPDATE/DELETE 语句)括起来,就实现了一个事务处理。
在标准 SQL 中 并没有定义事务的开始语句,而是由各个DBMS自己来定义的。比较有 代表性的语法如下所示。

  • SQL Server、PostgreSQL
    BEGIN TRANSACTION
  • MySQL
    START TRANSACTION
  • Oracle、DB2

COMMIT——提交处理

**COMMIT **是提交事务包含的全部更新处理的结束指令,相当 于文件处理中的覆盖保存。一旦提交,就无法恢复到事务开始前的状态了。
因此,在提交之前一定要确认是否真的需要进行这些更新。

《MICK-SQL基础教程(第二版)第四章 数据更新》 图3.png

ROLLBACK——取消处理

ROLLBACK 是取消事务包含的全部更新处理的结束指令(图4-4), 相当于文件处理中的放弃保存。一旦回滚,数据库就会恢复到事务开始之 前的状态(代码清单 4-22)。通常回滚并不会像提交那样造成大规模的数 据损失。
注:
自动提交的情况需要特别注意的是DELETE 语句。如果不是自动提交,即使 使用DELETE 语句删除了数据表,也可以通过ROLLBACK 命令取消该事务的处 理,恢复表中的数据。但这仅限于明示开始事务,或者关闭自动提交的情况。如果 不小心在自动提交模式下执行了DELETE 操作,即使再回滚也无济于事了。

ACID特性

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

原子性(Atomicity)

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

一致性(Consistency)

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

隔离性

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

持久性(Durability)

持久性也可以称为耐久性,指的是在事务(不论是提交还是回滚)结 束后,DBMS 能够保证该时间点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复。
如果不能保证持久性,即使是正常提交结束的事务,一旦发生了系统故障,也会导致数据丢失,一切都需要从头再来。
保证持久性的方法根据实现的不同而不同,其中最常见的就是将事务的执行记录保存到硬盘等存储介质中(该执行记录称为日志)。当发生故障时,可以通过日志恢复到故障发生前的状态。

下一章:第五章 复杂查询别忘点赞~

    原文作者:大美mixer
    原文地址: https://www.jianshu.com/p/483239e6ee47
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞