数据库介绍6

1、事务(Transaction)
事务是一组DML操作的逻辑单元,用来保证数据的一致
性。在一个事务内,组成事务的DML操作,或者一起
成功提交,或者一起撤销。

commit:事务提交,将全部数据改动进行提交
rollback:事务回滚,回退到事务开始,数据的状态
和事务开始之前一致
savepoint:事务保存点

事务的开始和终止:
开始:事务开始于上一个事务的终止或者第一条
     DML(insert/update/delete)语句
终止:事务终止于commit/rollback显示操作(即控制台
     输入commit/rollback)

如果连接关闭,事务将隐式提交
DDL操作,事务将隐式提交
如果出现异常情况(断电、执行语句失败),事务将
隐式回滚

事务中数据状态:如果多个会话操作同一个表数据,
当用户与服务器连接成功后,服务器将与客户端建立
一个会话(Session),客户端与oracle服务器的交互
都是在此会话中进行的。

事务演示:
步骤1:
开启会话A,创建表并插入一条数据,不提交
create table mytemp(id number(4));
insert into mytemp values(1);

步骤2:
开启会话B,在会话A进行commit之前,会话B中只能查
看表结构,查看不到数据的

步骤3:
会话A中提交操作后,会话B中就可以查看到数据

步骤4:
会话A中进行update操作,不要提交,会话B中看到的
是原来的数据
update mytemp set id=1001;

步骤5:
会话A提交后,会话B中看到数据修改的

步骤6:
会话A进行update操作没有提交,会话B中进行delete
操作时被挂起,因为试图操作相同的数据。
update mytemp set id=1234;
delete from mytemp;

步骤7:
会话A提交,会话B结束阻塞状态,开始执行

步骤8:
会话A更新数据,之后回滚操作
update mytemp set id=4567;
rollback;

总结:
a.事务内部数据的改变(未提交)只有在自己的
  会话中可以看到
b.事务会对操作的数据加锁,不允许其他事务操作
c.如果提交操作,数据的改变得到确认,所有的会话
都能看到修改的数据;数据上锁被释放;保存在临时
空间里面的数据也会被释放
d.如果回滚操作,数据的修改被取消;数据上锁被
释放;临时空间被释放。

保存点:可以回滚到指定的保存点
保存点演示:
drop table mytemp;

//创建表
create table mytemp(id number(4));

//事务开始
insert into mytemp values(3);
//设置保存点
savepoint A;

insert into mytemp values(4);
savepoint B;

insert into mytemp values(5);
rollback to A;//回滚到保存点A,A之后的保存都被
取消

select * from mytemp;//3这个记录插入数据库

2、数据库的主要对象
1)表(Table)
表是数据库存储的基本单位,在关系型数据库中,表
是一个二维结构,由行和列组成,横向为行也叫记录,
纵向为列也叫字段。

2)视图(View)
视图也称虚表(虚拟表,没有数据)。视图对应于一条
SELECT语句,此语句得到的结果集被赋予一个名字,
即为视图的名字。因此可以像操作表一样操作视图。

//查询20部门的员工信息
select empno,ename,position from emp_xu 
where deptno=20;

//创建视图
create view view_emp as
select empno,ename,position from emp_xu 
where deptno=20;

//分配权限
sqlplus /as sysdba 身份登录
grant create view to scott;//授予权限
revoke create view from scott;//回收权限

//scott身份登录
conn scott;

//查看视图
select * from view_emp;

视图的使用和表相同的,视图的好处,简化查询,隐藏
数据表中的列。视图不包含任何数据的,视图是基表
的数据投影。

//更新基表
更新员工表中1004员工的姓名'郭靖1'
update emp_xu set ename='郭靖1'
where empno=1004;

//更新视图
更新视图,将1004员工的姓名'郭靖'
update view_emp set ename='郭靖'
where empno=1004;

总结:
基表的DML操作会改变视图的显示结果,对视图的DML
操作同样会改变基表中的数据。视图只是基表的
投影。

3)索引(Index)
索引是用来在数据库中加速查询的数据库对象。通过
快速路径访问方式快速定位数据,可以较少的磁盘
I/O操作,提高访问性能。

全盘扫描方式:查询效率低
索引查询:比全盘扫描快

索引结构:数据+地址 (如:张三+room202)
//空间换取时间,使用索引占用空间,提高查询效率

自动创建索引:如果数据表中PK/UK
两种约束,索引会自动创建的,除此之外,需要手动
创建。

自定义索引语法:
create index 索引名 on 表名(列名);

//根据员工号1004找员工姓名
select ename from emp_xu
where empno=1004;

//查看语句执行时间
set timing on;

//给员工表中员工号添加一个索引
create index index_empno on emp_xu(empno);

//添加索引之后查询,由于数据量比较小,体现不明显

4)序列(Sequence)
序列是一种用于生成唯一数字值的数据对象,序列的
值由oracle按递增或递减自动生成的,通常用来自动
生成表的主键值,是一种高效率获取唯一主键值的
途径。

特性:产生连续的不同数字值,是数据库中独立的对象,
表可以用序列产生的值作为主键值,也可以不用。
序列可以为一个表或多个表产生主键值,建议一个序列
为一个表产生主键值。

//产生从1开始的数字值,步进是1
create sequence first_sequence;

select first_sequence.nextval from dual;//下一个值
select first_sequence.currval from dual;//当前值

create sequence second_sequence
start with 100
increment by 10;//从100开始,以10递增

select second_sequence.nextval from dual;//下一个值
select second_sequence.currval from dual;//当前值

create sequence third_sequence
start with 1000
maxvalue 1000
increment by -10;//1000开始,10递减

select third_sequence.nextval from dual;//下一个值
select third_sequence.currval from dual;//当前值

//创建表
create table user_xu(
id number(4) primary key,
name varchar2(10) not  null
);

//创建序列
create sequence user_sequence start with 1000;

//往表里面放数据
insert into user_xu 
values(user_sequence.nextval,'张三');

insert into user_xu 
values(user_sequence.nextval,'李四');

//查看表数据
select * from user_xu;

使用序列插入数据时,有'延迟段'特性,跳过序列
的第一个值。



































 

猜你喜欢

转载自blog.csdn.net/little_____white/article/details/81056929