oracle 使用杂记

  1. select a.c1,b.c2 from ta a,tb b
       不指定条件的连接查询会把两个表的记录按笛卡尔积连接起来(nxn)

  2. 静态cursor与REF cursor

    • 静态光标不能返回到客户端,ref光标能够被返回到客户端。
    • ref光标不能全局定义,必须在过程中处理它,或返回到客户端应用程序。
    • ref光标可以从子例程传递到父例程,而光标则不能。
  3. 动态游标最好不要自己定义,用oracle定义好的sys_refcursor。

  4. 游标for循环适用静态游标
    5.ORA-01002: 提取违反顺序
       原因1:在存储过程中已经fetch 了游标,而没有关闭游标,在java调用存储过程再次读取游标造成的。

  5. any/all的用法
    其后可以加列明和和常数,列必须是group by 中包含的。
    select distinct name from student group by name,fenshu having fenshu>any 80

  6. 查找所有成绩>80的学生

    select name  from student t group by name having 80 <all ( select fenshu from student where t.name=name)
    
  7. sum完成多类型数量统计

    select sum (case when fenshu>80 then 1 else 0 end) 优秀,sum (case when fenshu<=80 then 1 else 0 end) 及格 from student t
    
  8. 事务

    1. 事务特性:ACID

      • 原子性(atomicity):个事务中的所有操作,相当于一个原子操作,要么全部成功,要么全部失败
      • 一致性(consistency):由程序员保证,最经典案例:转账
      • 隔离性(isolation):指事务和事务之间的数据可见性,是最容易出问题的地方
      • 持久性(durability):事务完成以后,所有的数据都将持久到数据库中,不会因为其他原因而丢失
    2. 事务隔离性
      可能出现的问题:

      • 更新丢失:多个事务对一条数据同时更新,结果相互覆盖
      • 脏读:读取到未提交数据
      • 不可重复读:多次重复读取某条记录,结果不一致
      • 幻读:多次读取,记录的数量不一致

      解决问题:主要通过锁来解决,用锁来实现不同的隔离级别

      • 读未提交:没解决上述任何问题,
      • 读已提交:解决脏读
      • 可重复读:解决不可重复读,mysql可以解决幻读
      • 串行处理:所有事务串行执行,可以解决上述所有问题,但极大的降低数据库效率。

      更新丢失往往由程序员处理

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