Oracle学习笔记——第四天

Oracle学习打卡

  • oracle学习笔记——第四天
      • 1. 概念
      • 2.实现原理
      • 3. 事务边界
          • 1. begin:执行第一条sql命令时,事务被开启
          • 2. end:
      • 4. 数据安全
          • 1) 数据库服务器为表里的每一行数据提供一把“锁”,称之为“行级锁”
          • 2) 写锁 : 是因为事务对记录做了(insert update delete)添加了“行级锁”
          • 3) 查询功能不受写锁控制(查到的内容是数据库里的原始数据)
          • 4) 读锁: 可以在查询过程中对记录加锁(手动完成)
      • 5. 事务特性(ACID)【重点】
    • 二、主键的自动生成策略
      • 1. max函数生成
      • 2. 通过系统提供的函数生成主键
      • 3. 通过自定义表来生成主键
    • 三. 序列(sequence)
    • 四、视图(view)
      • 1. 概念:
      • 2. 创建
      • 3. 作用:
      • 4. 删除视图
    • 五、索引(index)
      • 1. 组成
      • 2. 作用
      • 3. 创建
      • 4. 索引时间开销

oracle学习笔记——第四天

1. 概念

​ 是操作数据库的最小单位,是由一组不可再分的sql命令组成的集合,事务的大小取决于实际业务的难易程度

Oracle学习笔记——第四天_第1张图片
Oracle学习笔记——第四天_第2张图片
Oracle学习笔记——第四天_第3张图片

2.实现原理

数据库服务器会为每一个连接上来的client,开辟一小块内存空间(回滚段),用来暂时保存sql命令的执行结果,在事务没有结束之前,回滚段里的数据只对当前client可见,当事务结束时,需要client明确处理回滚段中的数据。 事务成功则发出commit指令,数据库会将回滚段的数据写入数据文件;失败则发出rollback,db会将回滚段数据清空。

3. 事务边界

1. begin:执行第一条sql命令时,事务被开启
2. end:

​ 1) 执行了一组DML(insert update delete)命令,都需要手动输入commit或者rollback来结束事务

​ 2) 执行了一条DDL 或者 DCL 命令,命令后自带commit,执行成功事务直接结束

​ 3) 执行了一组DML命令后,断开client连接,正常退出做commit,非正常退出做rollback

-- 案例:   insert  update  commit  delete  update  create  insert  update  exit
-- 结论:  含有三个事务,其中第二个事务的commit是create命令自带的,delete和update结果随着create的
--        commit一起被写入数据库

4. 数据安全

1) 数据库服务器为表里的每一行数据提供一把“锁”,称之为“行级锁”
2) 写锁 : 是因为事务对记录做了(insert update delete)添加了“行级锁”

​ 当前事务对表里的记录做了增删改动作之后,数据库服务器会将事务操作过的记录加“行级锁”,锁没有

​ 打开之前,其他事务不能在对该条记录做DML命令。当事务结束时,行级写锁会自动打开释放,随机分配

​ 给其他等待这个锁标记的client。

3) 查询功能不受写锁控制(查到的内容是数据库里的原始数据)
4) 读锁: 可以在查询过程中对记录加锁(手动完成)

​ select * from xxx for update ; 得到所有查询结果 并 对结果里的行加锁

​ select * from xxx for update nowait; 查询数据同时获取记录的锁,如果无法成功立刻返回

​ select * from xxx for update wait n ; 获取锁时可以等待n秒,如果n秒后无法获取立刻返回

5. 事务特性(ACID)【重点】

​ 1) A(atomic):原子性,构成事务的这组sql命令是一个整体,不可再分,一起成功或者失败

​ 2)C(consitancy):一致性,事务进行过程中,数据的状态保持一致

​ 3) I(isolation): 隔离性,多个事务并发运行时,不能彼此互相影响

​ 4)D(durable):持久性,事务结束时必须对数据做持久化操作(commit,rollback)

二、主键的自动生成策略

1. max函数生成

​ 1) 第一步:通过max函数查询表里的最大主键值 select max(id) from xxx ; —result

​ 2)第二步:对max(id)+1 生成新的主键插入到表里 insert into xxx values( result+1, …)

​ 3)缺陷: 多个用户并发访问时,还是有可能出现主键冲突

2. 通过系统提供的函数生成主键

​ 1)sys_guid() : 会返回一个128bit的数字,注意需要将之间字段的数据类型改为number

​ 2)dbms_random.random() : 可以返回一个随机整数(可能正,可能负)

3. 通过自定义表来生成主键

Oracle学习笔记——第四天_第4张图片

三. 序列(sequence)

​ 1)作用: 是一种oracle数据库对象,可以生成一系列唯一的数值,用来作为主键插入表

​ 2)创建:

Oracle学习笔记——第四天_第5张图片
3)使用

​ 通过序列提供的变量 nextval 来获取序列里的值

​ ① 查看 : select seq1.nextval from dual;

​ ② 插入 : insert into test1 values( seq1.nextval , ‘aaa’ );

4) 删除

​ drop sequence 序列名 ;

四、视图(view)

1. 概念:

​ 一个起了名字的查询语句(只存储命令,不存储数据)

2. 创建

​ create view 视图名 as 查询语句 ;

​ 访问使用视图,相当于在调用视图里存储的查询语句 。

3. 作用:

​ 1)简化查询

   create view v1 as  select * from employees order by salary desc;

-- 查询工资最高的前五名员工
   select  *
   from v1
   where rownum <=5;

   select *
   from (  select v1.*,rownum rn from v1 where rownum<=10 ) t2
   where rn between 6 and 10;

​ 2)帮助权限控制

  create view  emp as select employee_id,last_name,...,department_id from employees;
  create view boss as select * from employees;
  -- 取消employees表的访问权限  

4. 删除视图

​ drop view v1;

五、索引(index)

1. 组成

​ 是一个两列多行的表格,第一列一般是对字段值的排序,第二列一般是这个值所在的地址。

​ 案例: 针对name字段添加索引 ( 对name字段的所有值排序,rowid)

2. 作用

​ 提高查询效率(db sv 会自动为表里的 pk 和 uk 建立索引)

3. 创建

​ create index 索引名 on 表(字段);

4. 索引时间开销

​ 索引不是越多越好

​ 1)如果查询的结果记录比较多,不适合用索引

​ 2)频繁增删改的数据库表不适合建立过多的索引

你可能感兴趣的:(MySQL,oracle,数据库)