【OracleDB】 10 数据处理 DML
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的更多相关文章
- 基本select 语句总结
--------------基本select语句总结 8.6---------------------------------------------------------------------- ...
- 数据库性能测试---前阿里数据库团队资深DBA杨奇龙
杨奇龙 前阿里数据库团队资深DBA 主要负责淘宝业务线,经历多次11.11,有海量业务访问DB架构设计经验. 目前就职于有赞科技DBA,负责数据库运维工作,熟悉MySQL 性能优化,故障诊断,性能压测 ...
- 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 ...
- Oracle深入学习
一.甲骨文公司介绍 甲骨文公司,是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩.1989年正式进入中国市场. 2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大 ...
- forall 与 for loop 案例
create table a_tab(ver number,id number);create table b_tab(ver number,id number);set timing on DECL ...
- sql操作总结
SQL 语句的多表查询方式例如:按照 department_id 查询 employees(员工表)和 departments(部门表)的信息.方式一(通用型):SELECT ... FROM ... ...
- Python自动化开发 - 函数
本节内容 函数背景介绍 函数是什么 参数与局部变量 返回值 递归函数 匿名函数 函数式编程介绍 高阶函数 一.函数背景介绍 老板让你写一个监控程序,监控服务器的系统状况,当cpu/memory/dis ...
- (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)
(4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...
- (2.2)DDL增强功能-自定义函数与存储过程
1.存储过程 精华总结: 通过对比@@ERROR一般和if判断结合使用,@@TRANCOUNT和try catch块结合使用,xact_abort为on可以单独使用Xact_abort为off时,如果 ...
- Zookeeper 源码(三)Zookeeper 客户端源码
Zookeeper 源码(三)Zookeeper 客户端源码 Zookeeper 客户端主要有以下几个重要的组件.客户端会话创建可以分为三个阶段:一是初始化阶段.二是会话创建阶段.三是响应处理阶段. ...
随机推荐
- Matlab打印运行进度
在运行matlab程序的过程中,有时候需要实时地掌握程序运行的进度,尤其对于一些耗时较长的循环操作,能够及时地输出运行进度,显得非常有必要. 打印进度条的实现方式就是不断地退格.输出. 退 ...
- FlashDuty Changelog 2023-10-30 | 告警路由与 Slack 应用
FlashDuty:一站式告警响应平台,前往此地址免费体验! 告警路由 什么是告警路由? FlashDuty已经与Zabbix.Prometheus等监控系统实现无缝集成,通过一个简单的webhook ...
- 『手撕Vue-CLI』自动安装依赖
开篇 经过『手撕Vue-CLI』拷贝模板,实现了自动下载并复制指定模板到目标目录.然而,虽然项目已复制,但其依赖并未自动安装,可能需要用户手动操作,这并不够智能. 正如前文所述,我们已经了解了业务需求 ...
- zabbix---监控Oracle12c数据库
使用插件:orabbix用于监控oracle实例的zabbix插件 orabbix插件下载地址:http://www.smartmarmot.com/product/orabbix/download/ ...
- Log4Net配置详解及输出自定义消息类示例
1.简单使用实例 1.1 添加log4net.dll的引用. 在NuGet程序包中搜索log4net并添加,此次我所用版本为2.0.17.如下图: 1.2 添加配置文件 右键项目,添加新建项, ...
- ComfyUI进阶篇:ComfyUI核心节点(二)
ComfyUI核心节点(二) 前言: 学习ComfyUI是一场持久战.当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点.面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措. ...
- 羊城杯决赛Misc
羊城杯决赛Misc easy00aes比赛时没离线0宽环境摆了 LmqHmAsk没思路,赛后看着群里各位师傅讨论才明白预期解,wp里直接放toto师傅的脚本了 这里放个toto师傅博客: https: ...
- ASP.NET Core修改CentOS的IP地址
最近做的一个产品中有个需求,就是客户使用的时候可以通过Web网页修改服务器的IP地址(客户是普通使用者,没有Linux使用经验,我们的产品作为一台服务器部署到客户机房,客户通过HTTP方式访问使用). ...
- 使用Nginx在80端口上代理多个.NET CORE网站
有两个.NET CORE3.1网站部署在CentOS7上(内网IP是192.168.2.32),现在想实现访问http://192.168.2.32时访问A网站,访问http://192.168.2. ...
- css 手稿
CSS 网页的布局和外观的显示样式 没有一张图解决不了的事:https://www.processon.com/mindmap/5e368a8be4b0d27af184e118 选择器 * 通配符选择 ...