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 关键字.


图1.png

通过隐式方法插入默认值

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


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


图3.png

ROLLBACK——取消处理

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

ACID特性

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

原子性(Atomicity)

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

一致性(Consistency)

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

隔离性

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

持久性(Durability)

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容