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. Matlab打印运行进度

      在运行matlab程序的过程中,有时候需要实时地掌握程序运行的进度,尤其对于一些耗时较长的循环操作,能够及时地输出运行进度,显得非常有必要.   打印进度条的实现方式就是不断地退格.输出.   退 ...

  2. FlashDuty Changelog 2023-10-30 | 告警路由与 Slack 应用

    FlashDuty:一站式告警响应平台,前往此地址免费体验! 告警路由 什么是告警路由? FlashDuty已经与Zabbix.Prometheus等监控系统实现无缝集成,通过一个简单的webhook ...

  3. 『手撕Vue-CLI』自动安装依赖

    开篇 经过『手撕Vue-CLI』拷贝模板,实现了自动下载并复制指定模板到目标目录.然而,虽然项目已复制,但其依赖并未自动安装,可能需要用户手动操作,这并不够智能. 正如前文所述,我们已经了解了业务需求 ...

  4. zabbix---监控Oracle12c数据库

    使用插件:orabbix用于监控oracle实例的zabbix插件 orabbix插件下载地址:http://www.smartmarmot.com/product/orabbix/download/ ...

  5. Log4Net配置详解及输出自定义消息类示例

    1.简单使用实例 1.1 添加log4net.dll的引用.   在NuGet程序包中搜索log4net并添加,此次我所用版本为2.0.17.如下图: 1.2 添加配置文件   右键项目,添加新建项, ...

  6. ComfyUI进阶篇:ComfyUI核心节点(二)

    ComfyUI核心节点(二) 前言: 学习ComfyUI是一场持久战.当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点.面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措. ...

  7. 羊城杯决赛Misc

    羊城杯决赛Misc easy00aes比赛时没离线0宽环境摆了 LmqHmAsk没思路,赛后看着群里各位师傅讨论才明白预期解,wp里直接放toto师傅的脚本了 这里放个toto师傅博客: https: ...

  8. ASP.NET Core修改CentOS的IP地址

    最近做的一个产品中有个需求,就是客户使用的时候可以通过Web网页修改服务器的IP地址(客户是普通使用者,没有Linux使用经验,我们的产品作为一台服务器部署到客户机房,客户通过HTTP方式访问使用). ...

  9. 使用Nginx在80端口上代理多个.NET CORE网站

    有两个.NET CORE3.1网站部署在CentOS7上(内网IP是192.168.2.32),现在想实现访问http://192.168.2.32时访问A网站,访问http://192.168.2. ...

  10. css 手稿

    CSS 网页的布局和外观的显示样式 没有一张图解决不了的事:https://www.processon.com/mindmap/5e368a8be4b0d27af184e118 选择器 * 通配符选择 ...