logo资料库

西电数据库上机.docx

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
数据库上机报告
数据库上机报告 一、实验目的 1.体会锁机制,通过同时启动两个会话,同时更新同一个数据,造成两个会话对 一个数据的争用,来体会锁机制(一个会话在等待)。 2.创造死锁,通过同时启动两个会话,分别对两个资源进行交叉加锁,来实现死 锁(Oracle 会检测出该死锁) 3.隔离级别,赋予事务不同的隔离级别,通过启动两个会话来体会并发。设计实 验用例,体现多事务的读写竞争。 4.索引:B 树索引,和基于函数的索引。 二、实验内容 1.写锁 在事务 1 对表 A 进行更新,不提交,在另一个事务 2 下再次对 A 表更新时不执行 操作,事务 2 被锁。
右侧事物 2 对 A 表的更新操作堵塞,出现写锁。 当事务 1 提交后,事务 2 才可以再次对同一个表进行操作。 2.死锁 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一 种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死 锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资 源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下, 永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象:死锁。 存在两个表 A 和 B,创建两个事物,事物 1 和事物 2。
A ,B 表的内容如上图。 事物 1 更新 A 表,事物 2 更新 B 表,但不提交。 事物 1 请求对表 B 更新,事物 2 请求更新 A 表,这时原来在等待事物 2 释放 B 表的事物 1 会发生死锁。因为在等待一个不可能发生的事件。 3.隔离性 事务指定一个隔离级别,该隔离级别定义一个事务必须与由其他事务进行的资源 或数据更改相隔离的程度。隔离级别从允许的并发副作用(例如,脏读或虚拟读 取)的角度进行描述。
在事务 1 查看表 A 信息,在事务 2 中对表 A 进行更新 再回到事务 1 中查看表 A 信息发现事务 2 的更新并没有执行。
事务 2 提交后,表 1 再次查看表 A,才被修改成功。 4.B 树索引 将 HR 的原有的索引全部禁掉,新建自己的索引在 EMPLOYEES 表的 SALARY 上。 create index EMPLOYEES_SAL on EMPLOYEES(SALARY); 新建索引 EMPLOYEES_SAL,并查询 SALARY 为 17000 的员工的 ID 和名字。 禁掉索引之后,再次查询。
对比可以看到两者的不同。 混合排序索引 create index desc_idx on EMPLOYEES(EMPLOYEE_ID DESC,FIRST_NAME ASC); 查询语句 select EMPLOYEE_ID from EMPLOYEES order by EMPLOYEE_ID DESC,FIRST_NAME ASC; 禁掉索引,再次查询;
此时变成了全表扫描。 6.函数索引 新建函数索引 CREATE INDEX EMPLOYEES_IDX ON "EMPLOYEES"(SUBSTR("FIRST_NAME",1,3)) 查询语句 SELECT * FROM EMPLOYEES WHERE SUBSTR(FIRST_NAME,1,3) = 'Nee'; 禁掉索引,再次查询:
对比两者的查询,索引更有优势。 三、总结 通过此次上机,学习了锁机制和索引,对课本更多了一些了解,但对其了解 不够深刻,仅限于完成实验,课下还要多学习。
分享到:
收藏