SQL 基础知识梳理(四) - 数据更新

【博主】反骨仔    【原文】http://www.cnblogs.com/liqingwen/p/5929786.html

  这是《SQL 基础知识梳理(三) - 聚合和排序》的下篇。

目录

一、插入数据

  1.INSERT 语句的基本语法

--语法:
--INSERT INTO <表名>(列1, 列2, ...) VALUES (值1, 值2, ...)
--示例
INSERT INTO dbo.Shohin
( shohin_id ,
shohin_mei ,
shohin_bunrui ,
hanbai_tanka ,
shiire_tanka ,
torokubi
)
VALUES ( '' , -- shohin_id - char(4)
'T 恤衫' , -- shohin_mei - varchar(100)
'衣服' , -- shohin_bunrui - varchar(32)
1000 , -- hanbai_tanka - int
500 , -- shiire_tanka - int
GETDATE() -- torokubi - date
);

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

        ( shohin_id ,
shohin_mei ,
shohin_bunrui ,
hanbai_tanka ,
shiire_tanka ,
torokubi
)
--列清单 ( '' , -- shohin_id - char(4)
'T 恤衫' , -- shohin_mei - varchar(100)
'衣服' , -- shohin_bunrui - varchar(32)
1000 , -- hanbai_tanka - int
500 , -- shiire_tanka - int
GETDATE() -- torokubi - date
)
--值清单
INSERT INTO dbo.Shohin
( shohin_id ,
shohin_mei ,
shohin_bunrui ,
hanbai_tanka ,
shiire_tanka ,
torokubi
)
VALUES ( '' , -- shohin_id - char(4)
'T 恤衫' , -- shohin_mei - varchar(100)
'衣服' , -- shohin_bunrui - varchar(32)
1000 , -- hanbai_tanka - int
500 , -- shiire_tanka - int
GETDATE() -- torokubi - date
),
( '' , -- shohin_id - char(4)
'T 恤衫' , -- shohin_mei - varchar(100)
'衣服' , -- shohin_bunrui - varchar(32)
1000 , -- hanbai_tanka - int
500 , -- shiire_tanka - int
GETDATE() -- torokubi - date
);

一次性多行 INSERT

  

  2.省略列清单

INSERT INTO dbo.Shohin
VALUES ( '' , -- shohin_id - char(4)
'T 恤衫' , -- shohin_mei - varchar(100)
'衣服' , -- shohin_bunrui - varchar(32)
1000 , -- hanbai_tanka - int
500 , -- shiire_tanka - int
GETDATE() -- torokubi - date
);

  

  3.插入 NULL 值

INSERT INTO dbo.Shohin
VALUES ( '' , -- shohin_id - char(4)
'T 恤衫' , -- shohin_mei - varchar(100)
'衣服' , -- shohin_bunrui - varchar(32)
1000 , -- hanbai_tanka - int
NULL , -- shiire_tanka - int
GETDATE() -- torokubi - date
);

  【备注】插入 NULL 值的列不能设置为 NOT NULL 约束。

  

  4.插入默认值

--示例:创建表时设置默认值
CREATE TABLE ShohinIns
(
id CHAR(4) NOT NULL,
num INT DEFAULT 0 --DEFAULT 默认约束
)
--示例:INSERT 时显示插入默认值
INSERT INTO dbo.ShohinIns
( id, num )
VALUES ( '', -- id - char(4)
DEFAULT -- num - int
)
--示例:INSERT 隐式插入默认值
INSERT INTO dbo.ShohinIns( id )
VALUES ('')

  【备注】建议使用显示的方式插入值。如果插入的时候隐式省略了列名,并且该列没有指定默认值的时候,该列的值会被设定为 NULL(如果省略的列设置了 NOT NULL 约束的话,执行会报错)。

  【总结】省略 INSERT 语句的列名,就会自动设定该列的默认值(没有默认值时会设定为 NULL)。

  

  5.从其它表复制数据

--语法
INSERT ...
SELECT ...
--示例
INSERT dbo.ShohinIns
( id, num )
SELECT shohin_id, shiire_tanka
FROM dbo.Shohin
--示例
INSERT INTO dbo.ShohinIns
( id, num )
SELECT id=1, num =2;
--示例
INSERT INTO dbo.ShohinIns
( id, num )
SELECT 1, 2;

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

二、删除数据

  1.2 种 删除数据的方法:

    (1)DROP TABLE 语句:删除表

    (2)DELETE 语句:删除表的数据

--语法
--DELETE FROM <表名>;
--示例
DELETE FROM dbo.ShohinIns;

  【备注】DELETE 语句删除的对象是记录(行),不是表和列。

  2.指定删除对象的 DELETE 语句

--语法
--DELETE FROM <表名>
--WHERE <条件>;
--示例
DELETE FROM dbo.Shohin
WHERE hanbai_tanka >= 4000;

  【备注】可以通过 WHERE 子句指定对象条件来删除部分数据。

  【备注】DELETE 语句中不能使用 GROUP BY、HAVING 和 ORDER BY 三类子句。

  【备注】如果要删除表全部数据时请使用 TRUNCATE <表名>,它比 DELETE 子句更高效。

三、更新数据

  1.UPDATE 子句的基本语法

--语法
--UPDATE <表名>
-- SET <列名> = <表达式>

  2.指定条件的 UPDATE 语句

--语法
--UPDATE <表名>
-- SET <列名> = <表达式>
--WHERE <条件>;
--示例
UPDATE dbo.Shohin
SET hanbai_tanka = hanbai_tanka * 10
WHERE shohin_bunrui = '厨房用具';

  

  3、使用 NULL 进行更新

--示例
UPDATE dbo.Shohin
SET torokubi = NULL
WHERE shohin_id = '';

  【备注】只有未设置 NOT NULL 约束和主键约束的列才可以清空为 NULL。

  

  4.多列更新

--示例
UPDATE dbo.Shohin
SET hanbai_tanka = hanbai_tanka * 10,    --逗号分割
shiire_tanka = shiire_tanka / 2
WHERE shohin_bunrui = '厨房用具'

四、事务

  1.事务:需要在同一个处理单元中执行的一系列更新处理的集合。

  2.创建事务:

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

    (1)COMMIT - 提交处理:提交事务包含的全部更新处理的结束指令。一旦提交,无法恢复到事务开始前的状态。

    (2)ROLLBACK - 取消处理:取消事务包含的全部更新处理的结束指令。一旦回滚,数据库就会回复到事务开始之前的状态。

--示例
BEGIN TRANSACTION;
UPDATE dbo.Shohin
SET hanbai_tanka = hanbai_tanka - 1000
WHERE shohin_mei = '运动 T 恤'; UPDATE dbo.Shohin
SET hanbai_tanka = hanbai_tanka + 1000
WHERE shohin_mei = 'T 恤衫'; DELETE FROM dbo.Shohin WHERE shohin_id = ''; ROLLBACK;  -- COMMIT

  

  3.ACID 特性

    (1)原子性(Atomicity):在事务结束时,其中包含的更新处理要么全部执行,要么完全不执行。

    (2)一致性(Consistency):事务中包含的处理,要满足数据库提前设置的约束,也称完整性。

    (3)隔离性(lsolation):保证不同事务之前互不干扰的特性。

    (4)持久性(Durability):事务一旦结束,DBMS 会保证该时点的数据状态得以保存的特性,也称耐久性。

      

备注

  这里采用 MS SQL Server 进行验证,不保证所有的 DBMS 执行结果正确。

传送门

  《SQL 基础知识梳理(一) - 数据库与 SQL

  《SQL 基础知识梳理(二) - 查询基础

  《SQL 基础知识梳理(三) - 聚合和排序


【参考】《SQL ゼロからはじめるデータベース操作》

[SQL] SQL 基础知识梳理(四) - 数据更新的更多相关文章

  1. 【SQL】- 基础知识梳理(二) - SQL简介

    一.引言 在梳理这些知识之前,说实话,如果有人问我SQL是什么?我可能会回答就是“INSERT,DELETE,UPDATE,SELECT”语句呗,还能是啥. 二.SQL概念 SQL是什么? SQL是S ...

  2. 【SQL】- 基础知识梳理(四) - 存储过程

    存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行 存储过程的好处 A. 存储过程允许标准组件式编程  ...

  3. 【SQL】- 基础知识梳理(六) - 游标

    游标的概念 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标(Cursor): 是处理数据的一种方法. 它可以定位到结果集中的某一行,对数据进行读写. 也可以移动游标定位到你需要的 ...

  4. 【SQL】- 基础知识梳理(八) - 事务与锁

    事务的概念 事务:若干条T-SQL指令组成的一个操作数据库的最小执行单元,这个整体要么全部成功,要么全部失败.(并发控制) 事务的四个属性:原子性.一致性.隔离性.持久性.称为事务的ACID特性. 原 ...

  5. 【SQL】- 基础知识梳理(一) - 数据库

    一.引言 知识分享这个事情在公司会议上被提出过几次,可一直因各种事情耽搁下来,“我不如地狱,谁入地狱”,怀着这样一种心态,写下了 数据库系列知识分享. 本文将一步步通过循序渐进的方式带你去了解数据库. ...

  6. 【SQL】- 基础知识梳理(七) - 索引

    索引的概念 在关系型数据库中,索引是对数据库表中一列或多列的值进行排序的一种结构. SQL SERVER中有索引的类型:按存储结构区分:“聚集索引(又称聚类索引,簇集索引)”,“分聚集索引(非聚类索引 ...

  7. 【SQL】- 基础知识梳理(三) - SQL连接查询

    一.引言 有时为了得到一张报表的完整数据,需要从两个或更多的表中获取结果,这时就用到了"连接查询". 二.连接查询 连接查询的定义: 数据库中的表通过键将彼此联系起来,从而获取这些 ...

  8. 【SQL】- 基础知识梳理(五) - 触发器

    触发器的概念 触发器对表进行插入.更新.删除的时候会自动执行的特殊存储过程 触发器的语法 create trigger tgr_name on table_name with encrypion –加 ...

  9. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

随机推荐

  1. 用CIL写程序:你好,沃尔德

    前言: 项目紧赶慢赶总算在年前有了一些成绩,所以沉寂了几周之后,小匹夫也终于有时间写点东西了.以前匹夫写过一篇文章,对CIL做了一个简单地介绍,不过不知道各位看官看的是否过瘾,至少小匹夫觉得很不过瘾. ...

  2. react-redux

    1. 首先redux,与react是两个独立的个体,项目中可以只用react,也可以只用redux 1.1 react-redux: 是一个redux作者专门为react制作的 redux, 增加了新 ...

  3. Redis的简单动态字符串实现

    Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...

  4. 云瓣影音网站&&微信端(已开源)

    随着该项目的发布到线上(小打小闹),即将又要开启另一段崭新的旅程.强迫自己停下来写写所学所得,个人认为总结和分享是一种很棒的学习方式.那让我们先来瞧瞧项目长的什么样.如果着急要源码的朋友,可以下拉到最 ...

  5. 你所能用到的BMP格式介绍

    原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有 ...

  6. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  7. SharePoint2016安装的过程的”Microsoft.SharePoint.Upgrade.SPUpgradeException”错误解决方法

    前提 在windows server 2012的服务器上运行安装sharepoint2016出现如下错误: Could not load file or assembly ‘Microsoft.Dat ...

  8. Linux基础介绍【第五篇】

    linux权限位 Linux文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件属主权限.属组权限.其他用户权限. r:read可读权限,对应数字4: w:write可写权限,对应数字 ...

  9. 杂项之python描述符协议

    杂项之python描述符协议 本节内容 由来 描述符协议概念 类的静态方法及类方法实现原理 类作为装饰器使用 1. 由来 闲来无事去看了看django中的内置分页方法,发现里面用到了类作为装饰器来使用 ...

  10. ASP.NET 中的 Async/Await 简介

    本文转载自MSDN 作者:Stephen Cleary 原文地址:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx 大多数有关 async ...