Q:创建空表后再插入记录,再回滚,记录没了,而表还存在?
A:看(下文)事务提交COMMIT
Topic1 :事务
Topic2:锁(exclusive,share锁)
一、事务概念
定义:事务是一些数据库操作的集合。
特性:
①原子性(Atomicity):事务是数据库的逻辑工作单位,事务中的所有操作要么都做,要么都不做,不存在其他情况。
②一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态转变为另一个一致性状态,不存在中间的状态。
③隔离性(Isolation):数据库中一个事务的执行不受其他事务的干扰,每个事务都感觉不到还有其他事务在并发执行。
④持久性(Durability):一个事务一旦提交,则对数据库中数据的改变是永久性的,以后的操作或故障不会对事务的操作结果产生任何影响。
二、Oracle事务处理
(1)事务提交(COMMIT):
①显式操作方式:
sql statements
...
commit | rollback
②隐式操作方式:
(Ⅰ)利用语句可以设置事务是否自动提交
//事务的隐式管理方式
//on :开启事务自动提交;off:取消自动提交
set autocommit on/off
(Ⅱ)当发生以下事件时,事务将结束
⒈ 利用commit/rollback进行事务的提交和回滚
2. 执行DDL语句(create、alter、drop、rename、revoke等)时,事务将自动提交。详细查看:http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1001.htm#SQLRF30041
3. 如果使用SQL*Plus,那么正常退出时,事务将会自动提交;而非正常退出时,则事务回滚。
(2)事务回滚(ROLLBACK):
(Ⅰ)取消全部操作
直接rollback
(Ⅱ)取消部分操作
insert into test_teacher (t_id, t_name) values (4, 'Gege');
insert into test_teacher (t_id, t_name) values (5, 'LAla');
savepoint A;
update test_teacher set t_name = 'Lala' where t_id = 5;
savepoint B;
insert into test_teacher (t_id, t_name) values (6, 'Miumiu');
rollback to B;
rollback to A;
rollback;
二、锁
oracle 资料:https://docs.oracle.com/cd/B19306_01/server.102/b14220/consist.htm
定义:锁是在事务访问相同资源时,防止事务之间的有害性交互的机制,这些资源包括用户系统对象、内存和数据字典中的共享数据结构。
Q:为什么需要锁?
A:并发运行时,容易造成读取脏数据。
Q:并发大概分为?
A:①读并发(不会造成错误,如select),②写并发(容易造成错误,如insert、update、delete等等)
Q:锁什么时候释放?
A:事务结束。
常见的锁应用:
两个客户端同时操作同一数据,一个进行操作,另一个进行等待。
//select 可以显式加锁
select * from test_teacher where t_id = 4 for update;