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. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. HDU1671——前缀树的一点感触

    题目http://acm.hdu.edu.cn/showproblem.php?pid=1671 题目本身不难,一棵前缀树OK,但是前两次提交都没有成功. 第一次Memory Limit Exceed ...

  4. SDWebImage源码解读之SDWebImageCache(下)

    第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...

  5. MCDownloadManager ios文件下载管理器

    我们用AFNetworking小试牛刀,写一个简单的下载器来演示功能. 前言 为什么AFNetworking能够成为顶级框架?我们究竟该如何领悟它的精髓所在?这都是很难的问题.安全,高效,流畅,这3个 ...

  6. Python(九)Tornado web 框架

    一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...

  7. spring boot 实战:我们的第一款开源软件

    在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...

  8. 推荐一个ASP.NET网站内容管理系统源码

    许多人都有各自的兴趣,如打球.踢毽子.看书.看电视.玩游戏等等....我近来迷上了猜灯谜,于是业余做了一个在线猜灯谜的网站:何问起谜语. 先出个谜语让你猜猜:不可缺一点(打一字).可以在线猜:http ...

  9. 如何使用dos命令查看MySQL当前使用的数据库?

    1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:

  10. TCP/IP之TCP_NODELAY与TCP_CORK

    TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...