Day5

transaction(事务/交易)
数据库中数据状态的变化是通过事务完成.事务就是一笔交易,由多条DML语句和commit(提交)/rollback(回滚)组成.

事务的生命周期
事务的结束
commit/rollback,DDL语句是自动commit的.
程序员跟数据库打交道,创建连接(session),在session上跑transaction.

数据库缺省的事务隔离级别
read committed(读已经提交的数据)
本事务正在修改的数据

资源只有一个,多个transaciton操作同一个资源,并发操作,加锁保证数据完整性。


不结束事务的后果
1、不提交其它session看不见。
2、不commit、rollback,锁资源不释放,会阻塞其他sessoin的。
3、不commit、rollback,rollback segment资源不释放。

DML加锁的方式
表级、行级表示加锁的粒度
锁的个数,共享多个 排他唯一
锁加不上,用排队的方式wait
表级共享锁
行级排他锁
表级 行级
s1 ok ok
s2 ok wait
s3 ok ok

DDL加锁 --DDL排他锁
锁加不上,用nowait方式,报错退出
resource busy and acquire with NOWAIT specified
资源忙,获得锁的方式用nowait方式。

DML不动,DDL报错resource busy的原因有可以能是有未提交的事务操作同一张表。

SQL> connect openlab/open123
Connected.
SQL> select count(*) from hiloo.emp_hiloo;
select count(*) from hiloo.emp_hiloo *
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> connect hiloo
Enter password:
Connected.
SQL> grant select on emp_hiloo to openlab;
Grant succeeded.
SQL> connect openlab/open123
Connected.
SQL> select count(*) from hiloo.emp_hiloo;
COUNT(*)
----------
10
SQL> select count(*) from hiloo.emp_dept;
select count(*) from hiloo.emp_dept
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> connect hiloo
Enter password:
Connected.
SQL> revoke select on emp_hiloo from openlab;
Revoke succeeded.
ORA-00001: unique constraint (HILOO.TEST_C1_PK) violated 唯一性约束(约束名)冲突
ORA-01400: cannot insert NULL into ("HILOO"."TEST"."C1") (不能插null值到某列)
列级约束 c1 number constraint 名字 约束类型
表级约束 constraint 名字 约束类型(列名)

c1,c2定义成联合主键.


























相关主题
相关文档
最新文档