Oracle DB处理数据(三)

2014-11-24 14:40:43 · 作者: · 浏览: 2
ELECT * FROM departments WHERE department_name = 'Finance';
但是,如果省略WHERE子句,则会删除该表中的所有行。第二个示例从COPY_EMP表中删除了所有行,因为没有指定WHERE子句。
示例:
删除WHERE子句中标识的行。
DELETE FROM employees WHERE employee_id = 114;
DELETE FROM departments WHERE department_id IN (30, 40);
根据另一个表删除行
在DELETE语句中使用子查询可根据另一个表中的值来删除某一个表中的行:
DELETE FROM employees
WHERE department_id =
(SELECT department_id FROM departments WHERE department_name LIKE '%Public%');
使用子查询可根据另一个表中的值来删除某一个表中的行。示例中删除了部门名称包含字符串“Public”的部门的所有雇员。
子查询将根据包含字符串“Public”的部门名称来搜索DEPARTMENTS表以找到部门编号。然后,子查询将该部门编号反馈给主查询,主查询将根据该部门编号从EMPLOYEES表中删除有关数据行。
TRUNCATE语句
从表中删除所有行,使表为空并保留表结构不变
是数据定义语言(DDL) 语句而不是DML 语句,无法轻易将其取消
语法:
TRUNCATE TABLE table_name;
示例:
TRUNCATE TABLE copy_emp;
清空表的一个更有效的方法就是使用TRUNCATE语句。
可以使用TRUNCATE语句从表或集群中快速删除所有行。使用TRUNCATE语句删除行比使用DELETE语句要快,原因如下:
TRUNCATE语句是数据定义语言(DDL) 语句,它不会生成回退信息。
截断一个表不会触发该表的删除触发器。
如果表是具有引用完整性约束条件的父表,则不能截断表。需要在发出TRUNCATE语句之前禁用该约束条件。
数据库事务处理
数据库事务处理由以下语句之一组成:
用于对数据进行一次一致更改的DML 语句
一条DDL 语句
一条数据控制语言(DCL) 语句
Oracle Server 在事务处理的基础上确保数据的一致性。事务处理令你在更改数据时具有更高的灵活性和控制力,还可以确保在用户进程失败或系统出现故障时保持数据的一致性。事务处理由一些DML 语句组成,这些DML 语句用于对数据进行一次一致更改。例如,在两个帐户之间转移资金时应涉及两个帐户,一个是借方帐户,另一个是贷方帐户,这两个帐户的金额相同。这两个操作必须都失败或都成功,没有借方也就没有贷方。
事务处理类型
数据库事务处理:开始和结束
在执行第一条DML SQL 语句时开始。
在发生下列事件之一时结束:
– 发出COMMIT或ROLLBACK语句。
– 执行DDL 或DCL 语句(自动提交)。
– 用户退出SQL Developer 或SQL*Plus。
– 系统崩溃。
数据库事务处理何时开始和结束?
事务处理在遇到第一条DML 语句时开始,在发生以下事件之一时结束:
发出COMMIT或ROLLBACK语句。
发出DDL 语句,例如CREATE。
发出DCL 语句。
用户退出SQL Developer 或SQL*Plus。
计算机出现故障或系统崩溃。
一个事务处理结束后,下一个可执行的SQL 语句会自动启动下一个事务处理。DDL 语句或DCL 语句是自动提交的,因此会隐式结束一个事务处理。
COMMIT和ROLLBACK语句的优点
使用COMMIT和ROLLBACK语句,可以:
确保数据的一致性
在使更改变成永久性更改之前预览数据更改
按逻辑关系对相关操作进行分组
使用COMMIT和ROLLBACK语句,可以控制将数据更改变成永久性更改。
显式事务处理控制语句
使用COMMIT、SAVEPOINT和ROLLBACK语句可以控制事务处理的逻辑。
注:不能对SAVEPOINT使用COMMIT语句。SAVEPOINT不是符合ANSI 标准的SQL。
将更改回退到某个标记
使用SAVEPOINT语句可在当前事务处理中创建一个标记。
使用ROLLBACK TO SAVEPOINT语句可回退到该标记。
UPDATE...
SAVEPOINT update_done;
INSERT...
ROLLBACK TO update_done;
使用SAVEPOINT语句可以在当前事务处理中创建一个标记,该标记会将事务处理分成更小的部分。然后,使用ROLLBACK TO SAVEPOINT语句可以放弃该标记之后的待定更改。
请注意,如果创建的第二个保存点的名称与较早保存点的名称相同,则会删除较早保存点。
隐式事务处理
在下列情况下会发生自动提交:
– 发出DDL 语句
– 发出DCL 语句
– 从SQL Developer 或SQL*Plus 正常退出,而没有显式发出COMMIT或ROLLBACK语句
当异常终止SQL Developer 或SQL*Plus 或者系统出现故障时会发生自动回退。
注:在SQL*Plus 中,AUTOCOMMIT命令可以在ON 或OFF 之间切换。如果设置为ON,则在执行单个DML 语句后立即提交该语句。你不能回退更改。如果设置为OFF,则仍可以显式发出COMMIT语句。此外,也可以在发出DDL 语句或退出SQL*Plus 时发出COMMIT语句。在SQL Developer 中会跳过SET AUTOCOMMIT ON/OFF命令。只有启用“Autocommit(自动提交)”首选项,才会在从SQL Developer 正常退出时提交DML 语句。要启用“Autocommit(自动提交)”,请执行以下步骤:
在“Tools(工具)”菜单中,选择“Preferences(首选项)”。在“Preferences(首选项)”对话框中,展开“Database(数据库)”并选择“Worksheet Parameters(工作表参数)”。
在右侧窗格中,选择“Autocommit in SQL Worksheet(以SQL 工作表的形式自动提交)”选项。单击“OK(确定)”。
系统故障
当系统出现故障而中断事务处理时,就会自动回退整个事务处理。这样可以防止因为错误而导致数据发生不必要的更改,还可以使表返回到上一次提交时的状态。Oracle Server 通过这种方式保护表的完整性。
在SQL Developer 中,通过在“File(文件)”菜单中选择“Ex