Oracle  数据库
   
    一:Oracle 关系型数据库(ORM)分布式集群数据库;
                   
                    二:Oracle 8i--> Oracle 9i   l=internet(网络)
                  
                    三:Oracle11G --> Oracle10g = grid (网络,云计算--虚拟化技术)2002

  四:Oracle 作为一个数据库, DB2数据库 -IBM 
       索引技术  存储过程技术  PLSQL 编程技术 ;

           五:Oracle 数据库:关系型数据库 , 集群分布式数据库 , 福布斯100家公司98家都在使用 ,
               
    
                    六:Oracle 的标准开发:
                           1:Oracle 数据库 安装好了 Oracle-OraDb10g_home1
   2:Oracle 实例  创建了 orcl;
                           3:创建自己的表空间 用来进行数据的存储没有;
                           4:创建自己的用户 操作自己的表空间 没有;
                            
  

                   七:数据操作方面:(根据业务的不同在 业务层处理业务;)

                                数据操作方面在 ,业务上一般都会有 权限设置; 因为一些数据 是 特定的;

                             1:添加 

                                      添加一般就是 新增数据 ;注意添加的数据类型;

                                    主键  一般设在 不关系业务逻辑的列上, 一般为 id ,因为唯一标识;

                             2:删除

                                删除一般就是根据 指定 id 删除, 如果是 对删除一般都是 id放在一个集合里 去循环依次删除;

                                删除在 业务里面是一个 ,一般为 注意项;因为不会真正删除 用户,只是给 用户 换了一个状态,查询时

                               不体现它,特定 条件 查询在  体现其用户 ;

                             3:更新

                           更新 ,也就是 修改数据 ,在你修改数据的 时候,注意 :要把你修改的 对象数据全部 查询出来,在把 你想                                        修改的 数据,覆盖掉原来的数据; 不查询全部的话,跟新保存时 会出现只有你  修改的有值,其他的都 null 

                       修改 一般就是 ,回显数据,修改,保存;

  

                             4:查询


                                      根据指定 id,查询;




             

八:Oracle 数据库sql语句:


                          1: sql:结构化查询语言,简称sql。


                                结构化查询语言是一种数据库查询和程序设计语言,


用于存储数据以及查询、更新和管理关系数据库系统;




         2:分为:


                                a:DML(数据库操作语言):分别用于添加、修改和删除表中的行。也成为动作查询语句;


   b:DDL(数据库定义语言):其语句包括动词CREATE 和 DROP。在数据库中创建新表或删除表,


         为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字,


   它也是动作查询的一部分;


                           c:DCL(数据库控制语言):他的语句通过 GRANT 和 REVOKE 获得许可,确定当个用户和用户组对数据库对                                         象的访问。


                                                       

                             某些 RDBMS 可用 GRANT 或 REVOKE 控制对表单个例的访问;








          九:Oracle 多表查询  、 连接查询 :


                1:最基础的多表查询:


            select  *  from 表一,表二 ;


多表查询的条数显示格式为:表一条数 * 表二条数 ;




                2:多表查询中的笛卡尔积问题?


         更好的做到保证数据完整,但这也促使很多数据 冗余、重复;


             

           利用连接条件的限定  主外键关联  来解决笛卡尔积问题;




                3:如果表太多的话,怎么办 表名太多、乱、繁琐 ?


                         使用内连接查询:(内连接的时候,靠的是主外键关联, 外建表收集外键信息,


                  收集好了之在与主键表关联)


         a:内连接查询特点:内连接查询中,外键的字段值必须是出现在两张表;


                                  是连接查询里查询最快的;


例子:


                                           select  *   from  EMP E


                                          inner join  DEPT D  ON  E.DEPTNO =D.DEPTNO 


                                           WHERE   D.DEPTNO=10 AND  LOWER(E.ENAME) LIKE 's%'

 


  


                4:外连接查询:( 主  次 ):为保证连接的两张表中某一张表的数据完整;


                    a:左外连接:(left join)保证左表完整 如果右表没有与之匹配数据以NULL填充;


-- 查询所有部门:


      select  *  from  dept  d  left   join  emp e  on  d.deptno=e.deptno


  -


b:右外连接:(right join)它正好与左外连接相反:


                              select  *  from  emp e  right  join  DEPT D on  e.deptno=D.deptno;




                        


                     注意 : 由外链接尝尝会出现左表数据为NULL的情况,这样通常第一列


又是一张表的主键,所以这样会破坏主键上的索引,查询会很慢


经验 : 所有的右连接都能以左连接代替.能用左连接不用右连接


能用内连接,不用外连接;



                     


 




           十:子查询:


          -- 查询比员工7654工资高和员工7788从事一样工作的人


        select  ename  from  emp e  where


                         sal >(    select  sal  from  emp e where  e.empno=7654)


                       and


                         -job =( select  job from  emp e  where  e.empno=7788)






          十一:连接公式:


                  select   *   from  外键表  外


                      内连接/外连接  join  主键表 主 on 外.外键 = 主.主键 ;




                  注意:一般用内连接,两个表中有一个表中的列与另一个表中的列对应不上为空,


                        那么用外连接,外连接一般都用左外连接;

  


          


  1:外连接分为:左外连接:


            右外连接:


 


           十二:自关联:


                     把一张表在关联的时候,起了两个别名,模拟两张表进行了一个连接查询,这种形式叫做自关联查询;

   


                         



   




     Oracle 存取  数据:


              数据存在哪里?


           Oracle 数据文件  很多   并且很分散


    system  能创建表空间 ,相当于我们 mysql 中的 root


 


       1:创建表空间 


      CREATE   tablespace    表空间名;


  


   2:指定表空间位置


           datafile '指定空间位置'(不建议放在c盘)




       3:指定表空间大小


           size 30m (30照)


      


       4:关闭自动增长


           autoextend   off;(关闭自动增长 )


             


     5:创建自己的普通用户:


           create   user  用户名;


   


      Oracle当中用户分为 2类:


                     a:普通用户:创建表  增、删、改、查  像scott用户   


                     b:管理员用户:system(数据方面的管理)   sys(运维方面的管理)



                                    我们一般不用sys ,用它只是改 system密码,sys 使用一般很危险;误删除表;

 


         


       6:指定密码:


            identified  by    密码(一般为 orcl);




       7:指定操作的表空间:


             default  tablespace 绑定的表空间名字;   




       8:给新用户赋予权限:


             -- connect  角色  登录角色权限;


            -- resource  更为 正式角色  开发角色:

   


               grant  connect,resource  to   角色;







  创建表:(切记不要看错你当前的用户)


            1:登录到自己的用户上,创建表:


                    create  table   表名(


  列名 1


  列名 2


  列名 3


  。。。。




)



           删除表:  drop  table  表名;


   


    面试题:删除整表的时候,那种方式比较快?第二种快;


      a:delete from 表名;慢   安全   带事务 ;可以删除单条数;delete 面对的是 表数据;


         -- 这种删除在删除的时候带事务删除,删除之前要备份一下你的数据,因为有回滚;


 


  b:truncate table  表名;快   危险   不带事务 ;不可以删除单条数据,truncate 面对的是表结构;


                 -- 这种删除在删除的时候,没有带事务,一旦删除,没有回滚;


-- 他的删除方式为:先把你的数据文件中数据都删掉,在根据你的表结构创建回来;


 


 


2:

Oracle 里的数据类型:


                     varchar2(size) :可变长字符数据;


 


char(size) :定长字符数据 ;




number(p,s) :可变长数值数据;(java中也有number,所有数字类型的父类就是 number)


          表示存储  数字(整数、小数)


                          p: 有效位数;(去掉负号和小数点 从左开始数)


                          s: 代表保留几位小数; 


                     


date :日期型数据类型


                             时、分、秒  也是这个;




                     LONG : 可变长字符数据,最大可达到2 G;




                     clob : 字符数据,最大可达 4 G;




                     raw and  LONG RAW :原始的二进制数据;




                     blob : 二进制数据,最大可达到 4 G;


        


                     bfile :存储外部文件的二进制数据,最大可达到 4 G;




                     rowid :行地址 ;



 




  


注意:编程语言中的统一数据类型

  


 

数据类型一共分为四类:(就像人的一生,)


                       -- 出生


                      1:数值数据类型  (java 中一般其实是分为两种:数值数据类型和非数值数据类型)


  


                    -- 大一点


                     2;字符数据类型


 


                  -- 小学

  


   3:时间和日期数据类型


   


               -- 中学  高中   大学 成人


                4:文件数据类型 (声音  图片  视频)--> 二进制数据类型


  


  


     创建完表之后,操作表:


            1: 添加数据:


                  insert  into   表名


   (第一个括号里面写你要添加的列名;例如:pid、name、。。)


    values


    (第二个括号里面写,对应第一个括号的列名要添加的数据;);


                      


            2: 在执行这种增  删  改  的时候得事务:


               --  提交:


                  commit;


  


               --  回滚事务:


                  ROLLBACK;       




  


            3 :更新语句:


     update   表名  set  修改的列名= 要修改的内容,......


   where   rowid  ='你要修改的记录的id'


                 


4: 获取rowid :  select  rowid,别名 . *  from   表名  别名;






5: 删除数据:(根据指定 id,id相同用 rowid 删除);


        delete   from   表名  where  pid/rowid  ;






6:  Oracle 事务操作:


             Oracle 事务操作  增、删、改   必须显示  提交或回滚  ;


    事务隔离级别:1  2  4 8 数据 : 脏读 、幻读、虚读、不可重复读 ;


                             事务的四大特性: 原子性   一致性   隔离性   持久性 ;



           一旦增删改,不提交事务,当你退出登录,在登录跟没操作之前一样;


    Oracle 数据库有一个事务特性:事务点:如果那条数据你只想添加指定的几条的话,就在那你想添加的条数后面加上一个事务点,


                              SAVEPOINT  a;然后在你不想要的条数后面 ROLLBACK  TO  SAVEPOINT  a; 在提交事务   commit;


           你不想添加的 数据就不会去添加;

            


  


            a:Oracle 中事务隔离级别与隔离性:


                     1):读未提交数据:


 允许事务读取未被其他事务提交的变更,脏读、不可重复读和幻读的问题都会出现;


   


                     2):读已提交数据:


                                         只允许事务读取已经被其他提交的变更,可以避免脏读,但不可重复读和幻读问题任然可能出现;



      


            3):可重复读:


                       确保实物可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止其他事务对这个字段进行


           更新,可以避免脏读和不可重复读,但幻读的问题仍然存在;


  


        4):串行化:


                                确保事务可以从一个表中相同的行,在这个事务持续期间,禁止其他事务对该表插入、更新和删除操作,


           所有并发问题都可以避免,但性能十分低下;


 


Oracle 支持的3种事务隔离级别:读未提交数据 、串行化、READ ONLY;


                            Oracle 默认事务隔离级别为:读已提交数据;




            7: Oracle 数据约束:


     1):我们为什么使用约束?


       使用约束可以更好的保证数据的完整性;


   


  2):在 Oracle 数据库中,约束的类型包括:


        a:主键约束(Primary Key)


b:非控约束(Not Null)


c:唯一约束(Unique)


d:外键约束(Foreign Key)


e:检查性约束(Check)




               3):主键约束: 主键约束(Primary Key)


                     

一个表只有一个主键约束,主键约束不可重复,


                         主键约束一般设在无关有业务逻辑的列上,一般设为 id列;


                     

 


      a:例子:建表是直接添加 ;  


       pid  number(10) primary  key;


   


  b:表键成之后添加主键约束:


     alter  table 表名 add constraint 起一个名  primary  key (pid);   





         Oracle  PL/SQL 编程语言:


          1: 假如 A 公司 是  mysql 数据库,B  公司是  Oracle 数据库,他们的数据交互,表结构不一样;


              这是就用到了   数据迁移技术;


                        这就用到了 PL/SQL ,PL/SQL 具有一定的业务逻辑;

  


   

 


                   

  


      2:解决 PL/SQL 报错问题:


                        PL/SQL  也有着非常丰富的异常处理机制;


                           1):预定义异常: