3.4.2. 一般用法示例
3.4.3. 在 DELETE 中使用子查询
? 在 DELETE 中使用子查询,使删除基于另一个表中的数据。
3.4.4. 删除中的数据完整性错误
3.4.5. Delete和Truncate
? 都是删除表中的数据
? Delete操作可以rollback,可以闪回 ? Delete操作可能产生碎片,并且不释放空间 ? Truncate是清空表
3.5. 数据库事务
3.5.1. 事务基础
数据库事务由以下的部分组成:
? 一个或多个DML 语句
? 一个 DDL(Data Definition Language – 数据定义语言) 语句 ? 一个 DCL(Data Control Language – 数据控制语言) 语句
数据库事务:
? 以第一个 DML 语句的执行作为开始
? 以下面的其中之一作为结束:
? 显示结束: commit rollback
? 隐式结束(自动提交): DDL语言,DCL语言, exit(事务正常退出)
? 隐式回滚(系统异常终了): 关闭窗口,死机,掉电
使用COMMIT 和 ROLLBACK语句,我们可以:
? 确保数据完整性。
? 数据改变被提交之前预览。 ? 将逻辑上相关的操作分组。
3.5.2. 控制事务
? 回滚到保留点
? 使用 SAVEPOINT 语句在当前事务中创建保存点。
? 使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。
3.5.3. 事务进程
? 自动提交在以下情况中执行:
? DDL 语句。
? ?
? 提交或回滚前的数据状态
? 改变前的数据状态是可以恢复的
? ? ?
执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。 DML语句所涉及到的行被锁定, 其他用户不能操作。
DCL 语句。
不使用 COMMIT 或 ROLLBACK 语句提交或回滚,正常结束会话exit。
? 会话异常结束或系统异常会导致自动回滚。
? 提交后的数据状态
? 数据的改变已经被保存到数据库中。
? ? ? ?
改变前的数据已经丢失。 所有用户可以看到结果。
锁被释放, 其他用户可以操作涉及到的数据。 所有保存点被释放。
? 提交数据示例:
? 数据回滚后的状态
使用 ROLLBACK 语句可使数据变化失效:
? 数据改变被取消。