DML(Data Manipulation Language – 数据操纵语言)

- 向表中插入数据

- 修改现存数据

- 删除现存数据

【事务是由完成若干项工作的DML语句组成的】


INSERT 语句语法

一次只能向表中插入一条数据

INSERT INTO    table [(column [, column...])]
VALUES (value [, value...]);

插入数据

- 为每一列添加一个新值。

- 按列的默认顺序列出各个列的值。

- 在 INSERT 子句中随意列出列名和他们的值。

- 字符和日期型数据应包含在单引号中。

INSERT INTO departments(department_id, department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
INSERT INTO employees(employee_id,last_name,email,hire_date,job_id)
VALUES (300,’Tom’,’tom@126.com’,to_date(‘2012-3-21’,’yyyy-mm-dd’),’SA_RAP’);

插入空值

隐式方式: 在列名表中省略该列的值

INSERT INTO    departments (department_id, department_name    )
VALUES (30, 'Purchasing');

显示方式: 在VALUES 子句中指定空值

INSERT INTO    departments
VALUES (100, 'Finance', NULL, NULL);

插入指定的值

SYSDATE 记录当前系统的日期和时间

INSERT INTO
employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 100);

加入新员工

INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'AC_ACCOUNT', 11000, NULL, 100, 30);

创建脚本

在SQL 语句中使用 & 变量指定列值。

& 变量放在VALUES子句中。

INSERT INTO departments
(department_id, department_name, location_id)
VALUES
(&department_id, '&department_name',&location);

从其它表中拷贝数据

INSERT 语句中加入子查询。

INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;

不必书写 VALUES 子句。

子查询中的值列表应与 INSERT 子句中的列名对应

INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';

UPDATE  更新数据

语法公式:

UPDATE        table
SET column = value [, column = value, ...]
[WHERE condition];

【可以一次更新多条数据。】

使用 WHERE 子句指定需要更新的数据。

UPDATE employees
SET department_id = 70
WHERE employee_id = 113;

如果省略 WHERE 子句,则表中的所有数据都将被更新

UPDATE     copy_emp
SET department_id = 110;

UPDATE 语句中使用子查询

更新 114号员工的工作和工资使其与205号员工 相同

UPDATE   employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 114;

调整与employee_id 为200的员工job_id相同的员工的department_id为employee_id为100的员工的department_id。

UPDATE  copy_emp
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);

更新中的数据完整性错误

UPDATE employees
SET department_id = 55
WHERE department_id = 110;

错误提示不存在

ERROR at line 1:
ORA-02291: integrity constraint (HR.EMP_DEPT_FK) violated - parent key not found

样例2:

update employees set manager_id = 299 where employee_id = 203; 

DELETE 删除数据

语法公式

DELETE FROM      table
[WHERE condition];

删除指定的记录行

DELETE FROM departments
WHERE department_name = 'Finance';

如果省略 WHERE 子句,则表中的全部数据将被删除

DELETE FROM  copy_emp;

DELETE 中使用子查询

使删除基于另一个表中的数据

DELETE FROM emp1
WHERE department_id =
(SELECT department_id
FROM dept1
WHERE department_name LIKE '%Public%');

删除中的数据完整性错误

DELETE FROM departments
WHERE department_id = 60;

具有外键关联的纪录行无法被删除

ERROR at line 1:
ORA-02292: integrity constraint (HR.EMP_DEPT_FK) violated - child record found

【You cannot delete a row that contains a primary key that is used as a foreign key in another table.】


数据库事务  DataBase Transaction

事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。

数据库事务由以下的部分组成:

- 一个或多个DML 语句

- 一个 DDL(Data Definition Language – 数据定义语言) 语句

- 一个 DCL(Data Control Language – 数据控制语言) 语句

COMMIT和ROLLBACK语句的优点

- 确保数据完整性。

- 数据改变被提交之前预览。

- 将逻辑上相关的操作分组。

回滚到保留点

使用 SAVEPOINT 语句在当前事务中创建保存点。

使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。

UPDATE...
SAVEPOINT update_done;
Savepoint created.
INSERT...
ROLLBACK TO update_done;
Rollback complete.

事务进程

自动提交在以下情况中执行:

- DDL 语句。

- DCL 语句。

- 不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话。

【会话异常结束 或 系统异常 会导致自动回滚】

提交或回滚前的数据状态

- 改变前的数据状态是可以恢复的

- 执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正

- 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。

- DML语句所涉及到的行被锁定, 其他用户不能操作。

提交后的数据状态

- 数据的改变已经被保存到数据库中。

- 改变前的数据已经丢失。

- 所有用户可以看到结果。

- 锁被释放,其他用户可以操作涉及到的数据。

- 所有保存点被释放。

提交数据

DELETE FROM employees
WHERE employee_id = 99999;
1 row deleted. INSERT INTO departments
VALUES (290, 'Corporate Tax', NULL, 1700);
1 row inserted.

提交改变

COMMIT;
Commit complete.

数据回滚后的状态

使用 ROLLBACK 语句可使数据变化失效:

- 数据改变被取消。

- 修改前的数据状态被恢复。

- 锁被释放。

DELETE FROM copy_emp;
22 rows deleted.
ROLLBACK;
Rollback complete.


【OracleDB】 10 数据处理 DML的更多相关文章

  1. 基本select 语句总结

    --------------基本select语句总结 8.6---------------------------------------------------------------------- ...

  2. 数据库性能测试---前阿里数据库团队资深DBA杨奇龙

    杨奇龙 前阿里数据库团队资深DBA 主要负责淘宝业务线,经历多次11.11,有海量业务访问DB架构设计经验. 目前就职于有赞科技DBA,负责数据库运维工作,熟悉MySQL 性能优化,故障诊断,性能压测 ...

  3. MySQL data sync to Oracle with OGG(Remote Delivery)

    MySQL to Oracle with OGG 1. Install MySQL: yum install mysql-community-server [root@localhost ~]#  y ...

  4. Oracle深入学习

    一.甲骨文公司介绍 甲骨文公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩.1989年正式进入中国市场. 2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大 ...

  5. forall 与 for loop 案例

    create table a_tab(ver number,id number);create table b_tab(ver number,id number);set timing on DECL ...

  6. sql操作总结

    SQL 语句的多表查询方式例如:按照 department_id 查询 employees(员工表)和 departments(部门表)的信息.方式一(通用型):SELECT ... FROM ... ...

  7. Python自动化开发 - 函数

    本节内容 函数背景介绍 函数是什么 参数与局部变量 返回值 递归函数 匿名函数 函数式编程介绍 高阶函数 一.函数背景介绍 老板让你写一个监控程序,监控服务器的系统状况,当cpu/memory/dis ...

  8. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

    (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...

  9. (2.2)DDL增强功能-自定义函数与存储过程

    1.存储过程 精华总结: 通过对比@@ERROR一般和if判断结合使用,@@TRANCOUNT和try catch块结合使用,xact_abort为on可以单独使用Xact_abort为off时,如果 ...

  10. Zookeeper 源码(三)Zookeeper 客户端源码

    Zookeeper 源码(三)Zookeeper 客户端源码 Zookeeper 客户端主要有以下几个重要的组件.客户端会话创建可以分为三个阶段:一是初始化阶段.二是会话创建阶段.三是响应处理阶段. ...

随机推荐

  1. linux系统下,安装maven教程

    1.下载 官网:https://maven.apache.org/download.cgi 2.上传包 将下载好的maven安装包apache-maven-3.8.6-bin.tar.gz放在磁盘的 ...

  2. linux系统下,jdk的安装和配置教程,以jdk-8u311为例

    1.官方下载 下载地址:https://www.oracle.com/ 本文以jdk8为例, 1)下载地址:https://www.oracle.com/java/technologies/downl ...

  3. .NET借助虚拟网卡实现一个简单异地组网工具

    由于工作需要,经常需要远程客户的服务器,但是并不是所有服务器都能开外网端口,使用向日葵等软件终究还是不太方便,于是找了很多工具,包括zerotier 等,但是由于服务器在国外等有时候还不同, 于是开始 ...

  4. flutter 创建第一个项目(二)

    新建flutter project 项目 这样就创建出了第一个项目

  5. js中字符串的方法,17种方法

    字符串的17种方法...... 1.length:返回字符串的长度. const str = "Hello, World!"; console.log(str.length); / ...

  6. css 让页面变灰色

    html { -webkit-filter: grayscale(1); }-webkit-filter(滤镜)有十种效果,分别是:     // grayscale 灰度     // sepia ...

  7. Mac 上切换 node 版本总结

    Mac 上切换 node 版本总结 背景 在做项目的时候,往往会遇到老项目没有升级的问题,node环境版本比较低,自己电脑安装或者新项目安装了最新版本的 node 环境,那么既要支持老版本的使用也要支 ...

  8. 判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过

    判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过如果含有 + %符号无法判断, 否则判断不准或报错 Exception in thread "main" j ...

  9. 开源云同步的markdown写作软件——Yosoro

    文章目录 前言 简便的项目管理 舒服的写作体验 支持one driver 存在缺点 前言 Yosoro是一款支持在Win.Linux.macOS上使用的写作软件.它的界面设计以及交互上表达出的极简主义 ...

  10. ClickHouse特性及底层存储原理

    ClickHouse的特性 ClickHouse是一款MPP架构的列式存储数据库,但MPP和列式存储并不是什么"稀罕"的设计.拥有类似架构的其他数据库产品也有很多,但是为什么偏偏只 ...