TCL 事务控制语言
来源:互联网 发布:四维码扫描软件下载 编辑:程序博客网 时间:2024/06/10 03:08
TCL 事务控制 语句
什么是事务:用于确保数据的一致性,由一组相关的DML组成, 该组DML的操作要么全确认,要么全取消
比如银行转账业务 步骤一:从A账户减少300元,步骤二:向B账户增加300元.
为了确保总的金额不变 就要维持数据的一致性 步骤一和步骤二两个操作或者全确认 或者全取消
事务的开始语句:update insert delete select ... for update 都能触发一个事务的开启
事务的结束语句:commit提交 rollback回滚
未完成的事务可以撤销
未完成的事务,其他会话看不到结果,只能看到提交的结果
维护事务需要锁和回退段参与
事物控制语句
COMMIT
SAVEPOINT
ROLLBACK
事务的提交方法
1.手动提交
执行commit语句
2.自动提交
ddl,dcl会自动提交之前未结束的事务
exit 退出sqlplus会自动提交
3. 设置sqlplus里: set autocommit on|off
事务的撤销方法
1.手动撤销
执行rollback
2.自动撤销
网络或数据库崩溃
强制退出sqlplus 点击X按钮
commit 执行就是提交整个事务
rollback 用savepoint设置定点 可以回退到事务过程中的定点位置
SCOTT@ora10g> select * from t1 where id=3;
ID NAME HIREDATE DEPTNO SAL
---------- ---------- ------------------- ---------- ----------
3 shrek 2010-12-31 08:51:19 30 600
SCOTT@ora10g> update t1 set sal=sal+10 where id=3;
1 row updated.
SCOTT@ora10g> savepoint u10;
Savepoint created.
SCOTT@ora10g> update t1 set sal=sal+10 where id=3;
1 row updated.
SCOTT@ora10g> savepoint u20;
Savepoint created.
SCOTT@ora10g> update t1 set sal=sal+10 where id=3;
1 row updated.
SCOTT@ora10g> savepoint u30;
Savepoint created.
SCOTT@ora10g> rollback to savepoint u10;
Rollback complete.
SCOTT@ora10g> select * from t1 where id=3;
ID NAME HIREDATE DEPTNO SAL
---------- ---------- ------------------- ---------- ----------
3 shrek 2010-12-31 08:51:19 30 610
SCOTT@ora10g> rollback;
Rollback complete.
SCOTT@ora10g> select * from t1 where id=3;
ID NAME HIREDATE DEPTNO SAL
---------- ---------- ------------------- ---------- ----------
3 shrek 2010-12-31 08:51:19 30 600
SCOTT@ora10g>
什么是读一致性
SCN (system changed number)数据库内部时间戳
数据库每做一件事都会有SCN号跟随 进行定位
场景描述:
SCOTT原工资3000
A_session在SCN 1000时间改了SCOTT的工资 4000 但是没有提交
B_session在SCN 1001时间查看SCOTT的工资 此时应该看到的是3000还是4000?
看到3000还是4000取决于数据库的事务隔离级
ORACLE数据库默认采用的是:查看提交后的数据(查询已提交)
所以上面场景中B查到的是3000
场景描述:
1.A_session发起查询 SCN 1000 查询数据很大 时间很长
2.在上步查询未完成时:
B_session要修改数据 SCN 10001,
为了能确保修改能够被回滚,把SCN 1000的数据(改前镜像)复制到回滚段,之后修改数据并提交
3.A_session查询才运行到去查看B_session刚修改的数据
此时A_session需要的数据状态为SCN 1000时的,而数据却被B_session改成了SCN 10001状态
A必须要找到SCN 1000状态的数据,为了获取到SCN 1000时候的数据,A去回滚段中查找到数据.
这就是读一致性
确保读到数据是select发起时SCN点数据状态
即一个语句所处理的数据集是在单一时间点上的数据集,这个时间点是这个语句开始的时间
一个语句看不见在它开始执行后提交的修改。
那么这3000从哪里获得? 回滚段
回滚段中什么时候添加的数据? B_session更改前
回滚段中的数据叫什么? 改前影像
- TCL 事务控制语言
- TCL: 事务控制语言
- My SQL事务控制语言(TCL)
- oracle TCL事务控制语言及 运算符
- SQL语言:数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)和事务控制语言(TCL)
- MySQL的初步使用(3)———SQL语句TCL事务控制语言
- 事务控制语言(DTL)
- 事务控制语言(DTL)
- tcl语言
- TCL语言
- tcl语言
- TCL语言
- Oracle:数据操作语句 (DML-insert into,update,delete) 部分、事务控制 (TCL-commit,rollback)
- Tcl 控制结构
- TCL 语言简介
- TCL 语言简介
- tcl语言简介1
- TCL语言简述
- Android TextWatcher监控EditText中的输入内容并限制其输入字符个数
- 数据类型
- IDE工具之Myeclipse篇二:导入项目后出现红叉
- C#如何创建类中类?
- java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
- TCL 事务控制语言
- JAVA File类操作(键人岐)
- Mysql SQL CAST()函数
- ACE主动对象模式(1)
- 用户和权限
- 运行其他脚本,加载关卡
- 如何判断一个请求是否为AJAX请求
- ioctl系统调用
- 视图