Oracle学习笔记

ORACLE学习笔记

登录命令: sqlplus soctt/tiger@......:1521/orcl

修改语句命令:change,ed,spoll,a(追加)

 

别名加引号的区别

性能优化:

      (1):*;

      (2):where的解析,从右到左,影响ANDOR判断.

      (3) havingwhere,尽量使用where

      (4)使用多表查询代替子查询

      (5)尽量不要使用集合运算

      (6)使用索引和视图,不要使用like查询

      (7)不要用字符串代替所有类型

null特性:

      (1)不能使用not IN( null)

      (2)含有NULL的排序,升序排最后,降序默认最前,nulls last

      (3) 不能使用XX=null

      (4) null值参与的运算都等于null,虑空nvl(a,b),

 

LIKE: %_

||连接符相当于JAVA+符号

""表示别名,''表示字符串和日期,字符串大小写敏感,区分MYSQL,日期格式敏感.

区分SQLSQLPLUS命令

赋值使用:=

between..and 包含边界,小值在前,大值在后

ORACLE默认开启事务,MYSQL手动开启事务.

order by 作用所有列,升降序只作用于最近的列

dual 伪表

日期的表示,ORACLE只有DATE,MYSQLDATETIME,系统时间SYSDATE, SYSTIMESTAMP

next_day应用-备份

日期和数字与字符串的自动转换,前提是符合格式要求.

组函数自动虑空值,可嵌套虑空函数

GroupBy需与组函数语句结合使用,

where 后面不能跟组函数(havingwhere的区别)

GroupBy中的rollup增强

hibernate 使用SQL语句与HQL语句的

decodecase语句实现,条件判断功能

(+)设置左右外连接

表的四种连接:内连接,外连接,自连接,等值连接,不等值连接

自连接不适合操作大表(笛卡尔集),可使用层次查询

伪列Level的使用

order by 可写列序号

只要满足树的数据结构都可以使用层次查询

查看数字字典: select * from v$nls_parameters;

修改日期格式:alter session setNLS_DATE_FORMAT='yyyy-mm-dd';

 

清除:字典设置:host cls

设置页面记录数:set pagesize 20;

一些基本设置命令:

      SQL> --设置行宽

   SQL>show linesize

   linesize 80

   SQL>set linesize 150

       SQL> --设置列宽

       SQL>col ename for a8

       SQL>col sal for 9999

       SQL> /

层次查询语句:

 

  SQL> selectlevel,empno,ename,mgr

  2  from emp

  3  connect by prior empno=mgr

  4  start with mgr is null

  5  order by 1;

在函数中插入字符串用" ";

几个与null值有关的函数:nullif(a,b),coalesce(a,b,c),nvl2(a,b,c)

round(sysdate,'month'),round(sysdate,'year')

Rollup关键字:

      selectdeptno,job,sum(sal) from emp group by rollup(deptno,job);

子查询书写注意事项: 1,括号 2, 可以放在where, select,                       having, from 后面,不能在group by 后面.

 

放在select 后的子查询必须使用单行子查询,一个主查询可以使用多个子查询,可嵌套.

from 后面跟Select语句有建新表功能(重点)

相关子查询

wm_concat

空字符串 to_char(null)

一次插入多条数据: 地址符:& ,批处理

如何处理海量数据

DDL语句不能回滚,

deletetruncate的区别

alter table 表名 move; 整理碎片,导入,导出

set timing on/off 设置时间显示

SELECT * FROM TAB 查看表

 

子表的外键必须为父表的主键

constranit 定义约束

@操作符的作用

管理员没有回收站,视图没有回收站,从回收站查看表需加" ".

flashback table 功能(1)将表恢复到某个时间点,(2)从回收站恢复表.

 

nvl()可以合并列

问题:如何解除外键关联

 

--------------------------------------------------------------------------

sqlplus 常用命令:

      登录:用户名/密码@orcl

      查看用户:  show  user

      conn  用户名/密码@orcl

-----------------------------------------------

ip:5560/isqlplus 网页界面

 

游标循环:

      declare 

     curosor XXX

      is

      select   XXXXXXXX

   for 变量  in  游标  loop

      ...........................

      end    loop

----------------------------------

存储过程:

      create orreplace  procedure   XXX

      is

      ...

---------------------------------------------

触发器

   create orreplace  triger  XX

  before/aftrer  curd  on    [for each row]

 

 

-------------------------------

oracle默认事务隔离级别为READ Commited

 

 

select ......for upadate  /  加锁,锁定查询的数据,大量并发修改的数据需要加锁

 

PL/SQL 使用在以下对象中

      匿名块

      函数  

      存储过程

     

      触发器

      对象类型

------------------------------------------------------------------

数据库和实例:

            数据库:磁盘上的物理文件

            实例:

 

触发器的作用:备份,日志,两表复制

 

--------PL/SQL-----------------------------------------------

 

游标

         游标的类型:隐式游标,显示游标,REF游标

         游标使用完要关闭;

      隐式游标

         通过隐式游标的属性可以获得最近执行的DML语句结果的信息: %found ;%notfound;%rowcount;%isopen

 

         select..... into ..... 如果没找到,抛出异常,不会执行隐式游标

 

 

显示游标

作用: 处理返回多行的查询

使用过程

         1,定义  CURSOR .... IS .......SELECT.....[for update]

         2,打开游标  open ....

         3,结果集控制   fetch  .... into ....;

                                      update .... set ....... where currentof  游标名;

         4,关闭游标:close

 

声明游标可以设定参数以提高灵活性,游标的参数类型可以不设定长度.

 

游标可以由于批量更新或删除记录

 

游标的操作通常都要在循环中进行

循环游标

for  循环变量  in  游标名

loop

         .........

end loop;

 

 

* 循环变量不需要提前定义

 

 

REF 游标

定义: (1)TYPE ..... isREF  CURSOR  [ return 数据类型];

          (2)定义游标标量;

使用:

                 

                  打开语法: open cursor_name  for.......[using  变量列表]

 

 

 

游标的优缺点

好处:

                  可以从不同的select语句中提取结果集;

                  可以作为过程的参数传递;

                  可以引用游标的所有属性;

                  可以进行赋值运算;

缺点:

                  不能在程序包中声明变量;

                  forupdate 不能用游标变量一起使用

                  不能使用比较运算符

补充

使用bulk提取结果集,代替游标的循环操作,

 

语句:fetch  游标名   bulk  collect into  ........

 

--------------------------------------------------------------

锁和事务

行级锁

加锁后其他用户只能查询,不能修改删除,维护数据的一致性,完整性

 

典型应用: 卖车票 

 

锁的类型:行级锁,表级锁

 

下列语句会自动调用行级锁: update,insert ,delete ,select for update;

 

锁的释放:commit,roolback

 

语法: select  .... for update  [of  column ....]  [wait n | nowait]  [skip locked]

 

行级锁可以具体锁定到每行的字段.

 

可以使用skip locked 跳过锁定的行

表级锁

         显示定义锁语法:lock  table  ...... in  ....  mode;

 

 

共享锁(share)  ,不允许其他用户插入,更新,删除数据.但允许其他用户插入共享锁 (创建索引会产生共享锁)

 

共享行排他(share rowexeclusive) :限制高于共享锁,不允许其他用户共享锁(主外键约束)

 

排他锁(execlusive)  最高限制,只允许其他用户查询.

 

行共享锁: 禁止其他用户添加排他锁

 

出现死锁,系统会提示,需提交一个事务解决死锁

 

事务

事务特点(ACID):原子性,一致性,隔离性,持久性

 

事务操作的DDL语句的关系

 

--------------------------------------------------------------------------------------------

存储过程

 

定义: 经过编译,命名的PL/SQL

 

 

组成: 声明部分,处理部分,

 

分类: 带参数和不带参数

 

为什么使用存储过程:

 

                  模块化设计

                  可重用

                  可维护性

                  安全性

 

语法: create or replaceprocedure  XXXX(参数列表)

    is /as

          变量定义;

         begin

 

        

 

         end;

 

调用:exec  存储过程名称

 

存储过程参数默认为输入参数

 

*注意:不能在代码块中给输入参数赋值,也不能将输出参数赋值给代码块中的变量.

 

代码块中select .. into  ...  赋值失败会抛出异常.

 

存储过程可以封装各种DML语句.

 

存储过程通过授权给其他用户使用, grantexecute  on  my_proce to  用户;

 

 存储过程优化

         (1)尽量避免大事务操作,提高系统并发能力

         (2)尽量避免反复访问同一张或几张表,考虑使用临时表;

         (3)尽量避免使用游标,因为游标效率较差.

 

 

 

      函数与存储过程的区别

l  函数只接受输入参数

l  形参不能是PL/sql类型

l  函数的返回值必须是数据库类型

l  访问函数的两种方式:使用PL/SQL语句块;使用SQL语句  select  function from dual;

l  函数有且只有一个返回值,必须有return语句,存储过程没有return语句

函数中使用游标

         <<tag>>标记

 

包与子程序

 可以存放存储过程,函数,触发器,游标,公共变量,常量,异常

 

程序包由规范(声明,包头)和和主体组成

 

 

 


你可能感兴趣的:(oracle,字符串,游标,学习笔记,存储,tiger)