oracle学习笔记整理(一)——基本知识

时间:2024-03-07 19:31:32

一、Oracle数据库

1、Oracle的适用范围:100G-1P,和钱相关的重要业务

  高于这个数据量可以使用非SQL数据仓库 如 Hadoop

  低于这个级别,可以考虑更廉价的解决方案

2、OLTP/OLAP(DSS)

         OLTP:联机事务处理,短,小,快,支持大并发(使用Oracle比较多)(DB2和Oracle)

        OLAP(DSS):决策支持系统, 支持数据分析,数据挖掘,生成报表等…....不需要支持大并发。对数据的敏感度不高,允许少量出错

 

二、基本的一些SQL

(一)、SQL*Plus Oracle连接工具

  1、  sqlplus / as sysdba 以最高权限连接oracle,系统管理员用户登入数据库

    普通连接 sqlplus 用户名/密码

  2、startup  启动数据库

  3、shutdown immediate; 关闭数据库

  4、SET ORACLE_SID= NAME 设置环境变量,通常为数据库名,用ORACLE_SID=NAME 连接到某个数据库

  5、create  user 用户 identified by 密码;(密码不能包含双引号)  创建一个普通用户

  6、grant dba to 用户;

    Oracle中所有的名称在内部都会转成大写再执行,如果加“”后则不会改动。Oracle对大小写不敏感。

  7、connent 用户名/密码      conn 用户名/密码 连接数据库

         sqlplus /nolog 不登入连接数据库

 (二)、 iSQL*Plus 基于网页的连接工具

    基本不用,略去。

 

三、创建表

 Create  table  table_name(……);

                   类型特点: 数字型:Number(10) 十位整数

                                                           Number(10.2) 带两位小数的十位整数

                                        字符型:VARCHAR2(20)  变长字符型

 

数据库中数据的存储都是以“块”为单位,块的大小一般都为8K,每创建一个表至少占据了一个块

 

四、表的修改

alert table t1 add(sal number(15,2));

   查看表: desc t1

 

五、表的删除

       DROP TABLE 表名

  【定义】关于DDL和DML

      DDL命令(Data Definition Language):创建、修改、删除表的命令都称为DDL命令,数据定义命令;

      DML命令(Data Manipulation Language):数据操作命令,如insert、delete、update这三条命令;

      在oracle中select是自成一个系列的。

 

六、数据库的基本操作(DML)

         1、insert

                  插入操作不要使用如下形式:Insert  t1  values(a1,a2,a3);防止遗留下一些不必要的隐患

         2、select

  【定义】 事务:从第一个insert开始,到提交火回滚为止。

  事务的特性:隔离性、原子性、一致性、永久性

  【简介】

     1). 原子性

  一个原子事务要么完整执行,要么干脆不执行。 这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。

  2). 一致性

  一致性代表了底层数据存储的完整性。 它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑不会导致数据的不一致(即,数据预期所表达的现实业务情况不相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须与另一账户中存入的金额相等。

  3). 隔离性

  隔离性意味着事务必须在不干扰其他进程或事务的前提下独立执行。 换言之,在事务或工作单元执行完毕之前,其所访问的数据不能受系统其他部分的影响。

  4). 持久性

持久性表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。

       3、回滚(rollback)

       4、delete

 

七、表的查询

联机文档下载:www.oracle.com/  10G 或者11GR1

 

1、Select语句

   *  | { [ DISTINCT ] column | expression [ alias ] ,…}

 其中 expression [ alias ]:别名

 Select 1 from dual; oracle的一个特殊表,没有列

 2、select中的常用表达式

 【区别】:单引号表示字符串, 双引号表示特殊的字符

 【关键字】distinct: 去除重复行

 【注意】:Oracle中 NULL表示 未知

                   所有和NULL值的运算结果都是NULL

    Select  *  from  t1  where  sal  is  null( is  not  null);

      查找表中某项为NULL值的行

      错误用法:Select  *  from  t1  where  sal =null;

 3、关系符

  1)、不等于:<>

  2)、Between a1 and a2   >=a1,<=a2;

  3)、LIKE: 字符串匹配关键字

           通配符:_:对应一个长度的任意字符

                            %:对应任意长度的任意字符

         特点:使用方便,性能比较差

         【注意】:oracle10g中正则表达式匹配会造成内存泄露

          Escape :自定义转义字符  

  4)、排序: ORDER  BY 默认升序, 降序(desc)

         数据顺序:

                   字符顺序:按照ASCIII码来排列

【简介】:dump命令

         查看汉字在oracle中的存储形式

         Select  dump(‘赵’) ,dump(‘钱’)  from  dual;

 

八、oracle中的常用函数:

         1、函数的分类

                 按返回值类型分类:字符函数、数字函数、日期函数、转换函数、通用函数

      按函数作用范围分类:单行函数(对每一行的值分别计算),

      多行函数(对多行同时计算,如sum()求和函数)

         2、字符处理函数

                   1)、大小写转换

                   2)、截取 SUBSTR(column|expression,m,[,n]): 字符串截取函数

                            LENGTHB();

                            //查找

                            INSTR(STR1,STR2),查找。在STR1中查找STR2在哪一个为止

          INSTR(STR1,STR2,m,[,n]),加入起始位置参数

          //替换

          REPLACE(STR1,STR2,STR3),在str1中将str2替换成str3

         3、数值型函数

                   1)、截断函数

                   ROUND(135.3456,2) 用法:对str1截断,保留2位小数

                   2)、取模函数

                   MOD(m,n);

         4、日期函数

                   Oracle中的日期由世纪、年、月、日、时、分、秒七部分组成

                   1)、设置日期格式的sql语句

                   alter session set nls_date_format=’yyyy-mm-dd hh24:mi:ss’

                            session:代表只针对一个会话有效

                   2)、日期的计算

          (1)、TO_DATE(‘2008-08-08’,’yyyy-mm-dd’);  将字符串转换成日期,转换格式如第二个参数

                            日期型只有减法运算

                            TO_DATE(‘2008-08-08’,’yyyy-mm-dd’)+1         该日期加1天

                            TO_DATE(‘2008-08-08’,’yyyy-mm-dd’)+1/2     该日期加12个小时

                            TO_DATE(‘2008-08-08’,’yyyy-mm-dd’)+1/24  该日期加一个小时

                            //在date后面加n个月

                            (2)、ADD_MONTH(date,n); 

                            (3)、NEXT_DAY(sysdate,1) 作用:计算sysdate后下一周的第一天是周几

                            (4)、LAST_DAY(sysdate) 作用:求本月的最后一天

                            (5)、ROUND(date,[‘fmt’]);对日期进行四舍五入

                                      如:ROUND(sysdate,’year’);按年四舍五入

 5、数字型函数

         1)、数字转换成字符串

                   TO_CHAR(num,’99,999.00’),具体转换格式可查阅相应的字符集

         2)、字符转数字

                   TO_NUMBER(字符)

【注意】:日期的隐式转换是有风险的,一般不做隐式转换。但数字的隐式转换一般没有问题。

6、通用函数

         1)、针对NULL值的通用函数

      (1)、NVL(表达式1,表达式2); 如果表达式1为NULL,则显示表达式2,如果不为空,仍然显示表达式1

      (2)、NVL2(表达式1,表达式2,表达式3),如果1不为NULL,则显示2,如果1为NULL,则显示3

      (3)、NULLIF(表达式1,表达式2),比较两个表达式,相同则返回NULL,不相同则返回第一个表达式。可以将某些非空值转换成空值

          2)、CASE函数(oracle中,CASE不是语句的关键字,而是作为一个函数)

                            CASE 判断表达式   WHEN  表达式1  THEN  结果表达式1

                                  WHEN  表达式2  THEN  结果表达式2

            WHEN  表达式3  THEN  结果表达式3

                            ELSE

                                     结果表达式4;

           3)、DECODE函数:可以实现和CASE一样的功能

 

7、组函数(多行函数)

         1、SUM(某一列名);   discinct: 去除重复值

           where条件在分组前,having条件在分组后,一般可以在分组前先用where过滤掉一部分行。

           having 条件 对于组函数计算完后进行条件选择

           group by 对空值进行过滤