xuguiyi1000 发表于 2013-1-14 00:33:12

oracle知识点

--oracle基础知识点1. oracle数据库中的物理文件类型   a. dbf (database file) 数据库的数据文件   b. log (logging file)日志文件      日志文件记录了某个时间段对数据库的所有修改操作(增加,删除,修改)。   c. ctl (controller files) 控制文件      控制文件记录了数据库当前的各种各样的状态。      控制文件很重要,如果损坏或者丢失,将导致数据库无法被加载。      instance去读取控制文件,然后加载数据库的。            一般来说,为了避免灾难,控制文件都需要多备份。   2。oracle数据库的逻辑结构   1. 表空间 (tablespace)      表空间是数据存放的场所,一个oracle数据库可以有多个表空间。      从物理上说,一个或者多个dbf文件构成了表空间。      从逻辑上说,一个或多个segment构成了表空间。   2. 段 (segment)      段可以跨越DBF文件。      创建一张表,就在某个表空间中创建了一个表段。   3. 区 (extent)      区是段的逻辑构成,一个段由多个区构成。      区不能跨越DBF文件   几个命令:   --查看表空间的情况   select tablespace_name,status,contents from dba_tablespaces;   select file_name,file_id,tablespace_name from dba_data_files order by tablespace_name;   select file_name,file_id,tablespace_name from dba_data_files;--查看表空间中包含的数据文件      --查看用户TEST1所拥有的区   select owner,sgement_name,sgement_type,tablespace_name from dba_segments where owner='TEST1';   select distinct owner from dba_segments;3. 数据字典   oracle中提供了一些专用数据表,以方便DBA对数据库状态进行查看。4. 创建用户并授权   create user uuu identified by uuu123   account unlock   default tablespace testtbs   temporary tablespace temp;   grant create session,create table,create view,create sequence to uuu;   alter user uuu quota 100m on testtbs;   select table_name,tablespace_name from user_tables;   drop user uuu cascade;5. schema         =====================================================================一. 数据库的分类 (按规模)    1. 微型      access (桌面型数据库)    2. 小型       foxpro (visual foxpro)       mysql (www.mysql.com)(C/C++,免费开源, unix平台,java)    3. 中型       sybase (www.sybase.com) (powerbuilder,powerdesigner, sybase)       MS SQL SERVER (6.0,6.5,7.0,2000,2005,2008)    4. 大型       informix       oracle(www.oracle.com)    5. 巨型       db2二. Oracle的版本    9i    10g (grid computing)    11g (unix...windows)      生产系统(product mode)    开发系统   (development mode)三. Oracle的系统架构       Oracle服务器=Oracle Instance + Oracle database    客户端与oracle instance进行交互,由instance负责对db的读取和写入数据,最终的数据由instance转交给client.    一个instance在一个单位时间内,只能挂接一个数据库,实现对该数据库的读写。    多个instance可以同时访问oracle数据库,以实现负载均恒。四。如何访问oracle实例?      > 要确定oracle实例的所在位置。    一般来说,网络上的某个应用的所在位置,包含两个部分:      1) 应用所在的设备的IP      2) 获得该应用所占用的端口。         (一台电脑中往往由多个应用,大家都共享一个IP,为了区分不同的应用,系统为每个应用都做了个数字标志,叫port)         绑定(bind)   xxx程序绑定了某个IP的某个端口。            oracle instance id      一个instance唯一标志. (sid)    ip:192.168.0.2    port:1521    sid: orcl    -> 192.168.0.2:1521:orcl    传输协议:    TCP, TCPS (TCP OVER SECURITY)    test account: test/test    > 了解数据库的名字    全局数据库名global database name    global database name: orcl    > 创建TNS NAME      uuu=192.168.0.2:1521:orcl      connect uuu    > 用sqlplus连接数据库      sqlplus test/testpwd@aaa五。oracle数据库的启动和关闭      sqlplus /nolog    conn sys/syspwd as sysdba    sqlplus sys/syspwd@tnsname as sysdba(tnsname tcp login)    sqlplus sys/syspwd as sysdba          (ipc)      1.关闭      shutdown immediate;    2.启动      oracle数据库的启动状态      1)nomount只启动instance, 但没有加载数据库,该状态适合调整instance参数时候使用。      2)mount    启动instance,并加载数据库,但不对外开放。 该状态适合内部调试时使用。      3)open   启动instance,加载数据库,并对外开放,允许外界访问。            startup(startup open)      startup nomount;      alter database mount;      alter database open;      conn test/test      conn sys/syspwd@tnsname as sysdba 六。数据库操作的普通话-结构化查询语言(SQL=Structured Query Language)    select * from ourstudent where stu_age>22;    1) 列输出限制部分   select *(输出所有的列)    2) 行输出限制部分   where age>22    sql语句不区分大小写    sql语句的分类:    1) DDL (Data Definition Language)(创建,修改,删除数据库对象的语句)          create table, drop table       DDL语句运行后自动commit(提交), DDL语句不支持rollback(回滚).       DDL语句不支持事务(transaction).      2) DML (Data Manipulation Language) (对记录进行CRUD操作 (create,Read,Update,Delete))       insert into sometable values(.....)       update sometable set someColumn=someValue where .....       delete from sometable where .....       select somecolumn from sometable where ......      3) DCL       grant ..... to someuser....    > 表的关联    一张表表达的内容有限,有时候需要多张表关联以提供更加丰富的信息。    SQL> create table ourclass(    2    cid int primary key,    3    cname varchar2(30) not null    4);    SQL> create table student(    2    sno int,    3    sname varchar2(20) not null,    4    sage int not null,    5    cid int not null, -- cid在本表中是普通字段, 但其定义在class表中则是主键。                         -- 对于本表来说,cid就是一个外来的主键,外键。    6    constraint PK_STU PRIMARY KEY (sno),--声明一个主键,主键的名字叫PK_STU, 主键对应字段是SNO.    7    constraint FK_STU_CLS FOREIGN KEY (scid) references class(cid)    8);    表已创建。    学生和班级之间的关系   N:1   图书类别和图书1:N    歌星和fans      1:N    两者的关系,有主控的一方,非主控方记住关系,则非主控方保持外键,外键就是两张表之间的关系。    在外键引用中:    子表不能增加主表所没有的字段值。    而子表如果引用了某字段值,主表拥有该字段值的记录不能删除。    案例:    求david所在的班级的名字:    通过联结(inner join)求解    select sname,cname    from student    inner join class    on scid=cid    where sname='david'    通过子查询(subquery)求解    1) 先在student这张表中,通过学生姓名david找到其所在的班级编号    2) 拿着这个编号到ourclass表中找到符合该编号的记录,最后找到cname.    select cname   from ourclass    where cid=(       select scid       from student       where sname='david'    );    select cname   from ourclass    where cid <> (       select scid       from student       where sname='david'    );    select cname   from ourclass    where cid in (       select scid       from student    );      select cname   from ourclass    where cid not in (       select scid       from student    );   > 分组查询SQL> create table goods(2    g_id int primary key,3    g_name varchar2(20) not null4);SQL> create table sale_log(2   sid int primary key,3   smount int not null,4   g_id int not null,6   constraint FK_SALELOG_GOODS FOREIGN KEY (g_id) references goods(g_id)7);SQL> select g_id,sum(smount)2from sale_log3group by g_id4;select a.g_id,a.g_name,b.mountfrom goods ainner join( select g_id,sum(smount) mount from sale_log group by g_id) bon a.g_id=b.g_id   > 聚合函数   sum,count,min,max,avg   (这些函数主要用在分组分析的场合,如果没有指明group by,那么默认所有记录为一个组。)   groupby 环境下的语句限制   select部分,只能出现被groupby的字段,以及被聚合函数修饰的字段。select * from sale_logorder by g_idselect count(*) from sale_logselect g_id,count(*)from sale_loggroup by g_idselect g_id,max(smount)from sale_loggroup by g_idselect g_id,min(smount)from sale_loggroup by g_idselect g_id,avg(smount)from sale_loggroup by g_idselect g_id,avg(smount)from sale_loggroup by g_idselect a.g_id,a.g_name,b.smountfrom goods ainner join( select g_id,sum(smount) smount from sale_log group by g_id) bon a.g_id=b.g_id> 字段的完全说明路径   username.tablename.columnname   test.goods.g_id    (命名空间 namespace)
页: [1]
查看完整版本: oracle知识点