DML数据操作语言之增加,删除,更新
1.数据的增加
数据的增加要用到insert语句 ,基本格式是:
insert into <表名> (列名1,列名2,列名3,......) values (值1,值2,值3,......);
其中(列名1,列名2,列名3,......)称为 列清单。
其中 (值1,值2,值3,......)称为 值清单。 列清单 和值清单的 中的列和值必须相互对应。
原则上,执行一次insert语句会插入一行数据记录。但是不同的DBMS对insert语句进行了扩展,可以执行一条insert语句,插入多行记录。
多行插入 :
当对表进行全列insert时,可以省略表名后面的列清单。这时 后面的values子句会把后面的值清单中的值按照从左到右的顺序赋给每一列。
insert into <表名> values (值1,值2,值3......); -- 表有几列,后面的值清单中就有几个值
当我们需要为插入的一行记录的某一列赋值为null时,我们可以在列清单中不写这一列的类名,也可以写这一列的类名,然后再后面的值清单中
为该列的值指定为null。
insert into <表名> (列名1,列名2,列名3......) values (值1,null,值3,......);
插入默认值 :
我们可以在使用create语句创建表结构的时候,使用default关键字指定某列的默认值。
然后在使用insert语句插入一条记录时,可以在列清单中,显示指出列名,然后再值清单中相应位置使用default,那么插入的这条记录的那一列的值就是
创建表结构时,指定的默认值。
insert into <表名> (列名1,列名2,列名3......) values (值1, default,值3......);
-- 为第二列赋默认值
也可以在列清单中不写这一列,对应值清单中就不写这行的对应值。插入时会为这条记录的那一列符create语句中指定的默认值。
从其他表中复制数据 :
insert子句 结合select语句使用可以实现从其他表中复制数据进入我们的目标表。
insert into <表名1> (列名1,列名2,列名3......) select 列名1,列名2,列名3...... from <表名2>;
这样的insert.... select.... 语句常在需要进行数据表的备份时使用。
除了可以将一个表中的原始数据记录,插入到另一个表中。还可以将一个表查询出来的进行聚合操作之后的记录,插入到我们的目标表中 。
这是就可以在select 语句中使用 group by子句 ,having子句 ,聚合函数等。
2.数据的删除
数据记录的删除需要用到delete语句,基本格式是:
delete from <表名> where <条件表达式>; -- 删除符合指定条件表达式的行记录
需要注意的是 :不能再delete和from中间指定列名 ,因为记录要删,总是按照行来删除的。不存在删除一行记录的某几列的值这种情况。这也是delete语句区别于其他语句的重要地方。
delete语句中 也不能使用 group by子句,having子句,order by子句。只能使用where子句 来筛选记录。
如果不使用where子句来筛选记录,如下:
delete from <表名>;
就会删除指定表的所有记录行。
3.数据的更新
数据记录的更新需要使用update语句,基本语法是:
update <表名> set <列名> = <值或值的表达式> where <条件表达式> ;
首先根据where子句来筛选出符合条件的记录 ,然后设置这些记录的指定的行的值为所指定的值或者值的表达式的运算结果。
如果不使用 where子句来筛选记录 ,则会对这个表中所有的记录的指定的列,进行更新操作。
可以是使用update语句来讲记录的某列值更新为 null
update <表名> set <列名> = null where <条件表达式> ;
update语句也支持,一条update语句进行多列更新:
update <表名> set <列名1> = <值或值的表达式> , <列名2> = <值或值的表达式> ...... where <条件表达式> ;
4.关于事务(Transaction)
在DBMS中 ,事务代表了对表中数据进行操作的单位。事务就是需要在同一个处理单元中执行的一系列的增加,删除,更新操作的集合。
标准SQL中并没有定于创建一个事务的SQL语句,但是不同的数据库自己定义了创建事务语句。
创建事务 :
SQL Server , PostgreSQL 数据库: begin transaction;
MySQL 数据库 : start transaction;
Oracle , DB2 数据库 : 无
虽然不同的数据库,自己定义了创建事务的SQL语句,但是标准SQL中规定了一种悄悄开启事务的方法。所以我们并不需要显示的创建事务。
但是,事务的结束需要用户明确的给出指示。事务结束的指令有两种:
commit; ---提交处理
事务开始语句; ----创建一个事务 ,表名下面的N条DML语句同属于一个事务
N条数据操作语句 (DML语句); --- 执行若干条DML语句 但是这是执行时在本地进行执行的 ,并没有真正改变远端数据库中的数据
commit; ---- 确认了DML语句的执行结果,将N条DML语句发送给 DBMS ,这时远端数据库中数据记录真正发生改变
rollback; ---撤销处理,也叫回滚
事务开始语句; ----创建一个事务 ,表名下面的N条DML语句同属于一个事务
N条数据操作语句 (DML语句); --- 执行若干条DML语句 但是这是执行时在本地进行执行的 ,并没有真正改变远端数据库中的数据
rollback; ---- 觉得上面的DML语句的执行结果,不是我们想要的效果,放弃将DML语句发送给DBMS, 这时远端数据库中数据记录没有发生改变
两种事务模式:
自动提交模式: 每一条DML语句就是一个事务 ,执行之后自动 commit
手动提交默认: 直到执行了commit;语句或者rollback;语句 上面的DML语句才算是一个事务
其中SQL Server ,PostgreSQL 和 MySQL 默认使用的是 自动提交模式
其中Oracle默认使用的手动提交模式。
DBMS的事务具有四种特性 :
原子性:
一致性:
隔离性:
持久性:
DML数据操作语言之增加,删除,更新的更多相关文章
- 6.1课堂笔记—DML(数据操作语言),DQL查询语句
一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%st ...
- DML数据操作语言
DML数据操作语言 用来对数据库中表的数据记录进行更新.(增删改) 插入insert -- insert into 表(列名1,列名2,列名3...) values (值1,值2,值3...):向表中 ...
- DML数据操作语言之复杂查询
1.视图(View) 我们知道,在关系型数据库中,用来保存实际数据记录的是数据表.和表同等概念也是用来保存东西是:视图. 但是数据表是用来保存实际数据记录的,而视图是用来保存常用select语句的. ...
- MySQL SQL DML (数据操作语言)
包括 SELECT, UPDATE, DELETE, INSERT SELECT 从数据库表中获取数据 用法 SELECT name FROM students; SELECT name,age FR ...
- DML数据操作语言之查询(二)
当我们查询出了N条记录之后 ,我们知道一共是几条记录,或者这些记录某一字段(列值)的最大值,最小值,平均值等,就可以使用聚合函数. 1.聚合函数 聚合函数会将null 排除在外.但是count(*)例 ...
- DML数据操作语言练习
--创建表T_HQ_BM2 --create table t_hq_bm2 as select * from t_hq_bm; commit; --添加行内容 --insert into t_hq_b ...
- DML数据操作语言之谓词,case表达式
谓词:就是返回值是真值的函数. 前面接触到的“>” “<” “=”等称为比较运算符,它们的正式名称就是比较谓词.因为它们比较之后返回的结果是真值. 由于谓词 返回的结果是一个真值 ,即tr ...
- DML数据操作语言之查询(一)
1.select语句基础 基本语句格式: select <列名>,.... from <表名>; select子句中列举出希望从表中查询出的列的名称,from子句则指定了选取 ...
- DML数据操作语言之常用函数
所谓函数,就是输入某一值,得到相应的输出结果的功能.相当于一个加工厂,给了原料,最终产出成品. 其中原料 就是参数(parameter). 产品 就是返回值. 函数大致可以分为以下五个种类: 算术函数 ...
随机推荐
- AC自动机模板1(【洛谷3808】)
题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...
- HiHocoder1419 : 后缀数组四·重复旋律4&[SPOJ]REPEATS:Repeats
题面 Hihocoder Vjudge Sol 题目的提示说的也非常好 我对求\(LCP(P - L + len \% l, P + len \% L)\)做补充 \(len=LCP(P, P + L ...
- bzoj2157
LCT板子,打个lazy即可 # include <stdio.h> # include <stdlib.h> # include <iostream> # inc ...
- 关系型数据库工作原理-数据结构(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- 【python学习笔记】10.充电时刻
[python学习笔记]10.充电时刻 任何python都可以作为模块倒入 *.pyc:平台无关的经过编译的的python文件, 模块在第一次导入到程序中时被执行,包括定义类,函数,变量,执行语句 可 ...
- 淘宝镜像 cnpm 不是内部命令
升级npm之后安装淘宝镜像,然后一直提示不是内部命令,网上查看文章 http://blog.csdn.net/fighting_2017/article/details/76979844,发现是路径问 ...
- 快速开发基于 HTML5 网络拓扑图应用之 DataBinding 数据绑定篇
前言 发现大家对于我从 json 文件中直接操作节点属性来控制界面的动态变化感到比较好奇,所以这篇就针对数据绑定以及如何使用这些绑定的数据做一篇说明,我写了一个简单的例子,基于机房工控的服务器上设备的 ...
- Unity服务端链接MySQL数据库
链接数据库,可以分为以下几个流程: 链接MySQL(数据库地址.端口.用户名.密码) 选择数据库 执行sql语句 关闭数据库 转换为代码如下: using System; using MySql.Da ...
- Git分支(1/5) -- 基本命令
把所有的变化都放在master分支并不是最好的做法. 建议的做法是把变化放在分支里面. 至少应该准备一个feature分支之类的, 把变化都隔离开来, 然后等到所有的功能都稳定之后再合并到master ...
- 使用git指令下载github仓库代码(笔记)
通过Git指令下载源码 Git概念说明 三种状态:修改状态.暂存状态和Git仓库 基本的Git工作流程: 在工作目录中修改文件 暂存文件,将文件的快照放入暂存区域 提交更新,找到暂 ...