© 2006 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice
第八章
数据操作与事物控制
目标
• 数据操作语句
• 事务控制语句
本章要点
• INSERT语句
• UPDATE语句
• DELETE语句
• COMMIT命令
• ROLLBACK命令
• 管理锁
数据操作
主要包括下列语句:
• –INSERT
• –UPDATE
• –DELETE
• –MERGE
INSERT语法结构
• 语法如下:
• –一次只插入一行
• –NULL的使用,连续的单引号(‘’)也可以
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示空值。
• –插入日期型数据
• –插入特殊字符
• –插入多行数据
• –按列的默认顺序列出各个列的值
• –在Insert子句中可以随意列出列名和他们的值
• –字符和日期型数据应该包含在单引号中
INSERT INTO 表名[(列名1[,列名2,…,列名n])]
VALUES (值1[,值2,…,值n]);
INSERT语句插入单行数据1/2
INSERT INTO departments
VALUES(300,'Operations',110,1500);
INSERT语句插入单行数据 2/2
• 显示默认值概述
–使用Default表示默认值
–符合SQL:1999
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
–可以使用显示默认值控制默认值的使用
–显示默认值可以在insert和update语句中使用
INSERT语句插入空值(NULL)
将一个新成立部门的信息写入departments中 ,其
中管理者未知。
或
或
INSERT INTO departments
VALUES(310,'Operations', NULL,1500);
INSERT INTO departments
VALUES(310,'Operations', '',1500);
INSERT INTO departments
(department_id,department_name,location_id)
VALUES(310,'Operations',1500);
INSERT语句插入日期型数据
将一新入职员工信息写入employees表
或
INSERT INTO
employees(employee_id,last_name,email,hire_date,j
ob_id)
VALUES(210,’Wang’,’SWANG’,’ 10-9月-
06’,’IT_PROG’);
INSERT INTO
employees(employee_id,last_name,email,hire_date,j
ob_id)
VALUES(210,’Wang’,’SWANG’,TO_DATE(’2006-9-
10’,’YYYY-MM-DD’),’IT_PROG’);
UPDATE语法结构
• UPDATE语法结构
• UPDATE简单修改
UPDATE 表名 SET 列名=表达式[,列名=表达式,
···]
[WHERE 条件表达式];
UPDATE employees SET salary=salary*(1+0.2);
UPDATE employees
SET salary=salary+200,manager_id=103
WHERE department_id=60;
UPDATE嵌入子查询修改1/2
除基于表自身实现嵌入子查询的方式实现修改操作
外,也可以在子查询中基于其他表实现修改操作。
UPDATE employees
SET department_id=10,
salary=500+(SELECT AVG(salary)
FROM employees)
WHERE job_id=(SELECT job_id FROM employees
WHERE employee_id=110)
AND employee_id<>110;
UPDATE嵌入子查询修改2/2
UPDATE employees a SET salary = salary+(SELECT
AVG(salary) FROM employees b WHERE b.department_id =
a.department_id)
DELETE语法结构
• DELETE语法结构
• DELETE删除数据
DELETE [FROM] 表名
[WHERE 条件表达式];
DELETE FROM departments
WHERE department_id=210;
DELETE删除数据 1/3
删除管理者编号(manager_id)为205的部门,相应
部门的员工予以解聘,不包括205号员工。
• DELETE语句不能删除被其他表引用了的记录值。
DELETE FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE manager_id =205)
AND employee_id<>205;
DELETE删除数据 2/3
• 删除数据 (完整性错误)
• –delete from departments where
department_id = 100;
• –ORA-02292: 违反完整约束条件
(NEU.EMP_DEPT_FK) - 已找到子记录日志
DELETE删除数据 3/3
• 删除数据 (相关子查询)
–delete emp_copy a
–where exists (select '1' from employees b
where b.employee_id = a.employee_id)
ROWID介绍 1/2
• ROWID:
–伪列,是表中虚拟的列,是系统自动产生的。
–每一行记录中都包含ROWID,表示这一行的唯一地址。
–ROWID标识了Oracle如何定位行,通过 ROWID 能快速定位一行记录。
SELECT rowid,cname
FROM dossier;
ROWID介绍 2/2
• ROWID的格式:
–ROWID中包含该行数据的物理位置信息,所以能快速的定位记录
使用ROWID进行数据操作
• ROWID的应用:
–快速定位单行记录,DML语句可以使用ROWID操作数据,效率最快
–作为表行的唯一标识
事务控制 1/8
• 事务的控制分为:显式控制及隐式控制。
• 显示控制:
–显示提交:Commit
–显示回滚:Rollback
• 隐式控制:
–隐式提交:当下列任意一种情况发生时,会发生隐式提交
a.执行一个DDL 语句
b.执行一个DCL 语句
c.从 SQL*Plus正常退出(即使用EXIT或QUIT命令退出)
–隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
a.从SQL*Plus中强行退出
b.客户端连接到服务器端异常中断
c.系统崩溃
注意:PL/Sql developer工具和Sqlplus略有不同。
事务控制 2/8
• 事务控制的命令主要有以下三个:
–事务提交:COMMIT
–事务回滚:ROLLBACK
–设立保存点:SAVEPOINT(作为辅助命令使用)
• 设置保存点语法:
–SAVEPOINT 保存点名称; ——定义保存点
–ROLLBACK TO保存点名称; ——回滚到已定义
保存点
事务控制 3/8
• 开始:事务开始于上一个事务结束后执行的第一个
DML语句
• 结束:事务结束于下面的任一种情况的发生:
–执行了COMMIT 或者ROLLBACK命令
–隐式提交(单个的DDL或DCL语句)或自动提交
–用户退出
–系统崩溃
事务控制 4/8
• 事务自动提交
• 设置格式:
• SQL*Plus自动提交的应用示例
SET AUTOCOMMIT [ON|OFF];
SHOW AUTOCOMMIT; ——查看AUTOCOMMIT变量状态
autocommit OFF
SET AUTOCOMMIT ON; ——把变量状态设置为ON
INSERT INTO test VALUES (‘TEST’);
已创建 1 行
提交完成 ——已经自动提交
事务控制 5/8
• 事务控制示例
DELETE FROM test;
ROLLBACK; ——撤消DELETE操作
INSERT INTO test VALUES(’A’);
SAVEPOINT insert_a; ——定义insert_a保存点
INSERT INTO test VALUES(’B’);
SAVEPOINT insert_b; ——定义insert_b保存点
INSERT INTO test VALUES(’C’);
ROLLBACK TO insert_b; ——撤消操作到insert_b保存点
DELETE FROM test WHERE test_str = ‘A’;
COMMIT; ——将所有修改写入数据库
ROLLBACK; ——所有操作已经COMMIT提交,不能回滚
事务控制 6/8
• 执行Commit或Rollback前的数据状态
–数据变化前的状态可以被恢复
–当前会话可以使用SELECT语句来验证 DML操作
后的结果
–其它会话不能查看由当前用户的DML操作结果
–受影响记录被锁定,也就是其它用户不能改变
受影响记录中的数据
事务控制 7/8
•Commit后的状态
–在数据库中数据变化成为永久性的
–先前的数据状态永久性的消失
–所有用户/会话都可以查询提交后的结果
–锁定的记录被释放,可以有效地被其他用户操
作
–所有的存储节点被清除
事务控制 8/8
• Rollback后的数据状态
–使用ROLLBACK 可以放弃所有悬而未决的变化。
–数据变化是可以撤销的
–先前的数据状态被恢复
–锁定的记录被释放
–所有的存储节点被清除
•
读一致性 1/2
• 读一致性保证了不同会话在同一时间查看数据时,
数据一致。
• ORACLE在两个不同级别上提供读一致性:语句级读
一致性和事务级一致性。
• 事务级一致性,当一个会话正在修改数据时,其它
的会话将看不到该会话未提交的修改。
• 语句级读一致性,保证单个查询所返回的数据与该
查询开始时刻相一致。所以一个查询从不会看到在
查询执行过程中提交的其它事务所作的任何修改。
读一致性 2/2
•
本章小结
• INSERT语句
• UPDATE语句
• DELETE语句
• 事务的概念及事务控制
练习1
1.向departments表中的部门编号、部门名称、区域编号三列插入两条纪
录,分别为:300,‘QQQ’,1500和310,‘TTT’,1700。观察执行结
果。
2.使用两种
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
完成下列操作,试在新部门的管理者和工作地区编号还
没有确定的情况下,向部门表中插入新部门信息如下:部门编号320及
330,部门名称F1及F2。
3.按顺序执行下列操作:
①、插入一个新的部门信息,开始事务。部门编号350,名称 人力资源
管理者100 区域编号1700。
②、建立保存点a。
练习2
3、查询插入的数据是否存在。
4、删除所有部门编号大于200的部门。
5、建立保存点b。
6、查询还有哪些部门信息存在。
7、更新部门编号为10的部门的管理者的编号为110。
8、查询当前部门信息。
9、执行回滚操作,但不回滚到事务的最开始,而是回滚
到保存点b。
10、提交事务,提交后事务已结束。
11、查看最终数据修改结果。
© 2006 Hewlett-Packard Development Company, L.P.
The information contained herein is subject to change without notice
Thanks!