虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > Oracle数据库 > Oracle数据库(Oracle存储结构、Oracle运行机制、日期相关的函数、序列、大对象数据类

Oracle数据库(Oracle存储结构、Oracle运行机制、日期相关的函数、序列、大对象数据类
类别:Oracle数据库   作者:码皇   来源:互联网   点击:

仅仅只是阅读浏览博客内容学习Oracle这种方式不行,更重要的是敲代码,推荐博客中代码建议阅读本博客的人去手动的敲一下代码! Oracle数据库(Oracle存储结构、Oracle运行机制、日期相关的函数、序列、大对象数据类型、表的修改与约束、事务)。

仅仅只是阅读浏览博客内容学习Oracle这种方式不行,更重要的是敲代码,推荐博客中代码建议阅读本博客的人去手动的敲一下代码!

知识点一、Oracle存储结构

在了解Oracle物理存储结构之前,首先了解一些表空间和数据库的结构组成。表空间是一个数据库被分成若干个逻辑单元,每一个逻辑单元称为表空间,在关系型数据库中,所有的数据都是放在表中,表放在表空间中。数据库在物理上是有若干个文件组成,逻辑上,由若干个表空间组成,表物理上是放在数据文件中的,逻辑上放在表空间上的。

Oracle的存储结构分别介绍物理存储结构和逻辑存储结构。

数据库的物理存储结构:

包括一些文件,其中文件主要由下面三种文件组成:
数据文件(*.dbf DatabaseFiles):存放数据,存放表(Segment段)
控制文件(*.ctl Control):数据库物理结构的仓库,用于存放数据库物理结构信息。
转储:alter database backup controlfile to trace(转储的目的是为了打开上述几种后缀名文件的时候,找不到合适的文件编译器,所以利用转储将文件转为能打开的格式。)
重做日志文件(*.log):存放每一次堆数据库的改变

数据库的逻辑结构:

表空间,表的容器,由若干个段组成,每一个段对应一个表,存放表数据,由若干个区组成,每个区为一个表中的一行,是一块连续的存储空间,由若干个块组成,其中块是表中的一列,Oracle中最小的存储单位。关于段分为:数据段和回滚段;其中数据段用于存放普通的表的数据(create table 创建出来的表就是普通表)创建表的实质就是创建数据段。回滚段是用于存放回滚数据,回滚数据是修改前的数据,即原数据。

知识点二、Oracle运行机制(在这里知识简单说一些问题,推荐博客:http://blog.chinaunix.net/uid-20274021-id-1969353.html)

先来一张Oracle数据库中写数据的运行过程:
这里写图片描述

在Oracle中存在实例这个概念,实例由一系列为当前数据库提供服务的内存和后台进程,内存和服务进程的集合成为一个实例。数据库高速缓冲区(Database Buffer Cache)用于存放从数据文件中读取的数据,Oracle查数据时,先从高速缓冲区中查找数据,如果找到了,直接取出来,如果没找到,则从磁盘数据文件中取,然后放到高速缓冲区。<喎"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPk9yYWNsZdDeuMTK/b7dyrGjrM/IsumjrLfFtb2438vZu7qz5cf41tCjrMi7uvPQ3rjEuN/L2bu6s+XH+Mr9vt2ho7nY09rV4rj2stnX99bQo6y05tTawb249s7EvP6jrKOoMaOpysfLrbDR0N64xLXEyv2+3dC0yOvTssXMyv2+3c7EvP7W0LXEo7+jqDKjqcqyw7TKsbry1rTQ0LDR0N64xLXEyv2+3dC0yOvTssXMyv2+3c7EvP7W0KO/PC9wPg0KPHA+zsrM4qOoMaOpoaJEQlduJm1kYXNoO0RhcmFiYXNlIFdyaXRlciBQcm9jZXNzo6jV4rj2vfizzL/J0tTT0LbguPajrLy0REJXMKOsREJXMaOsREJXMiZoZWxsaXA7o6mjqMr9vt2/4srp0LS9+LPMo6y4utTwsNHK/b7dv+K438vZu7qz5cf41tC1xMr9vt3K6dC0tb20xcXMyv2+3c7EvP7W0KOpPC9wPg0KPHA+zsrM4qOoMqOpoaLPyL3pydy8uLj2uMXE7qO61OC7urPlxvejqNStz8i7urPlxvfW0LXEyv2+3bG7uMSx5MHLo6mjrMDku7qz5cb3o6jX7r381+7J2cq508O1xLu6s+XG96Opo6zU4Mr9vt2jqMTatObW0LjEseS687XEyv2+3aOs0+vK/b7dv+K05rSitcSyu9K71sLK/b7do6mho7Wxu7qz5cb309bU4NPWwOTKsaOsvavU4MDku7qz5cb30LTI68r9vt3OxLz+1tCho7u6s+XG97vh1tjQwrHktcO4yb67o6jS4s6218W/ydbY0MIzzfm4w7u6s+XG98TatOa3xcr9vt2jqaGjtbG7urPlxveyu7m708PKsaOsudjT2ru6s+XH+LXEt9bF5LrNx+W/1bLfwtSjrMfr1NnW2NDCsunV0tfKwc+hozwvcD4NCjxwPtei0uLSu7Xjo7rKws7xzOG9u8HLo6yxu9DeuMS1xMr9vt2yu9K7tqjSqrG70LTI68r9vt3OxLz+1tCho8rCzvHDu8zhvbujrLWrsbvQ3rjEyv2+3dLRvq3QtMjryv2+3c7EvP6ho9Xiwb3W1sfpv/a2vNPQv8nE3LeiyfqjrL7f09Cyu8i3tqjQ1KGjPC9wPg0KPHA+1tjX9sjV1r67urPlxvcmbmRhc2g7UmVkbyBMb2cgQnVmZmVyo6jTw9PatOa3xbbRyv2+3b/itcTQ3rjEo6k8YnIgLz4NCs7KzOKjqDGjqaO6y62w0dDeuMS1xMjV1r7QtMjr1tjX9sjV1r7W0KO/zsrM4qOoMqOpo7rKssO0yrG68r2r0N64xLXEyNXWvtC0yOvW2Nf2yNXWvtbQo788L3A+DQo8cD7Oyszio6gxo6mhokxHV3ItTG9nIFdyaXRlciBQcm9jZXNzo6jI1da+yunQtL34s8yjrLi61PCw0cjV1r67urPlx/jW0LXExNrI3crp0LS1vdbY1/bI1da+zsS8/tbQo6k8L3A+DQo8cD7Oyszio6gyo6mhorWxzOG9u8rCzvHKsaGiw7+49DPD66GiyNXWvru6s+XH+ML6MS8zoaJEQldyvavQ3rjEtcTK/b7d0LS1vbTFxczK/b7dzsS8/tbQyrGjrMjV1r7K6dC0vfizzL7Nu+HWtNDQoaPW2Nf2yNXWvs7EvP7W0KOs09DSu7j2serWvqOs08PT2rHtyr6y2df3yvTT2sTEuPbKws7xo6zKws7x09DDu9PQzOG9u6GjPC9wPg0KPHA+PHN0cm9uZz7Wqsq2tePI/aGiT3JhY2xl1tDI1cbaz+C52LXEuq/K/Twvc3Ryb25nPjwvcD4NCjxwPrf7us9PcmFjbGXErMjPz9TKvsjVxtq48cq9o6hkZC1tb24teXmjqbXE19a3+7Suv8nS1NfUtq/Xqru7zqpkYXRlwODQzaOst7W72Lf+zvHG97Wxx7DKsbzkus3I1cbaoaM8YnIgLz4NCnN5c2RhdGW3tbvYZGF0ZTxiciAvPg0Kc3lzdGltZXN0YW1wt7W72HRpbWVzdGFtcDwvcD4NCjxwPqOoMaOpdG9fY2hhcihkYXRlLGZvcm1hdCm9q8jVxtrXqru7zqq48cq9u6+1xNfWt/u0rjwvcD4NCjxwcmUgY2xhc3M9"brush:sql;">参数介绍: format: 年:yyyy/yyy/yy/y/''月:mm简写月,mon全称月日:dd当前月的第几天,ddd当前年的第几天时:hh24 24小时制度,0-23; hh12/hh 12小时制,1-12分:mi秒:ss

(2)to_date(str, format)将一个日期的字符串转换成默认显示的日期格式的数据

    format参照to_char()函数。

知识点四、序列(Sequence)

序列是Oracle对象,用于生成连续的证书,Oracle没有自增长的类型,所以需要用到序列来实现自增长。
创建序列的语法:

    create sequence 序列名[start with num(从哪个值开始,升序默认1,降序默认-1)][increment by num(每次增长的数值,默认为1,正数表示升序,负数表示降序)][maxvalue num | nomaxvalue][minvalue num | nominvalue][cycle | nocycle][cache num | nocache]maxvalue num 指定该序列最大能的值,默认nomaxvalue,升序时默认10^27,降序时默认-1;
    minvalue num 指定该序列能取到的最小值,默认nominvalue,升序时默认1,降序时默认-10^26;
    序列取值范围[minvalue,maxvalue]cycle表示循环取值 升序:达到最大值后从最小值开始重新取;
    降序:达到最小值后从最大值开始重新取。 如果没有指定cycle,默认值:nocycle,不循环cache num 预先生成一些值,存放在缓存中,需要值的时候从缓存中取 用于指定缓存的序列的值的个数,默认20每个表都有自己的序列,用于生成自己的逻辑主键值nextval 用于获取序列的下一个值currval 用于获取序列的当前值**注意:调用currval之前,至少调一次nextval**

知识点五、大对象数据类型

    blob –
    Binary Large Object 二进制大对象,保存二进制数据,数据的插入操作依赖于编程语言 clob –
    Character Large Object 文本大对象 10g:4G 11g:128T

知识点六、表的修改与约束

1、表的一些常见修改:

    添加新的列定义alter table 表名 add(列名 类型,...);
    修改列的类型alter table 表名 modify(列名 类型,...);
    重命名列名 alter table 表名 rename column 旧列名 to 新列名;
    删除表的列alter table 表名 drop column 列名;
    修改表名 rename 旧表名 to 新表名;
    删除表drop table 表名 [cascade contraint];
    cascade contraint 级联删除外键约束,不删列复制表:根据查询结果创建一个表create table 表名 as select语句;
    根据查询结果,往指定表中插入数据insert into 表名 select语句;

2、表的约束

约束某个字段能保存什么样的数据。
列级约束:在定义列的同时指定约束,[constraint 约束名] 约束内容
表级约束:在列定义完后,再指定的约束,[constraint 约束名] 约束内容(制定列)

常见约束:

    主键约束 列级:primary key 表级:primary key(列名) 外键约束 列级:references 表名(列名) –

    mysql中不起作用 表级:foreign key (当前表列名) references 另一个表名(取值唯一的列/主键的列名);
    唯一约束: 列级:unique 表级:unique(列名) 非空约束: 列级:not null 表级:无 检查约束:mysql不支持检查约束,约束不起作用 列级:check(条件) 表级:check(条件)

修改约束

    not null –
    列级 alter table 表名 modify(列名 类型 not null);
    null –
    列级 alter table 表名 modify(列名 类型 null);
    添加主键约束、唯一约束、检查约束 –
    表级 格式:alter table 表名 add [constraint 约束名] 约束内容;
    alter table 表名 add primary key(列名);
    alter table 表名 add unique(列名);
    alter table 表名 add check(条件);
    添加外键约束 –
    表级 alter table 表名 add [constraint 约束名] foreign key (当前表列名) references 另一个表名(取值唯一的列/主键的列名);

删除约束

    alter table 表名 drop constraint 约束名;

外键约束

    列级:foreign key on delete cascade 表级:foreign key(列名) references 表名(列名) on delete cascade on delete cascade 删除主表记录时,级联删除所有关联的子表记录

知识点七、事务

推荐博客:http://blog.csdn.net/junmail/article/details/5556561
http://www.cnblogs.com/god-S/p/4709044.html
http://www.cnblogs.com/ITtangtang/archive/2012/04/23/2466554.html

事务:一组不可分的操作,由若干个一次操作组成(例如转账操作),这些操作要么同时成功,要么同时失败,事务的特性:ACID,
原子性 Atomicity
一致性 Consistency
隔离性 Isolation
永久性 Durability

事务常见操作:

    开启事务:关闭/开启自动提交:set autocommit off | on;
    提交事务 commit;
    回滚事务 rollback;
    回滚到最后一次commit后状态 rollback to 回滚点名;
    truncate table 表名;
    DDL,删除表的数据,截断表;
    先删表再建表;
    设置回滚点取数据:取数据之前会判断,要取的数据是否正在被一个事务操作,就会从这个事务的回滚段中取数据;
    如果没有被事务操作,先内存后数据文件回滚段 Undo Segment ,用于存放回滚数据 Undo Data,修改之前的原数据,回滚段在回滚表空间,回滚表空间数据文件:undoxxx.dbf 一个事务开启,系统会为他分配对应的回滚段,事务提交或回滚后自动释放

Oracle事务控制:

    oracle中的事务是隐式自动开启,它不需要用户显式地使用语句开启事务处理,当发生如下情况时,oracle认为一个事务结束: (1)、执行commit语句提交事务;
    (2)、执行rollback语句撤销事务;
    (3)、执行一条数据定义语句(例如greae、drop、alter语句等)。如果该语句执行成功,那么表示系统自动执行commit命令;
    如果操作失败,那么表示系统自动执行rollback命令;
    (4)、执行一个数据控制命令(例如grant、revoke等),这种操作表示自动执行commit命令;
    (5)、断开数据库的连接。如果使用exit命令正常退出SQL*Plus,则系统自动执行commit命令;
    如果退出出现异常,则系统自动执行rollback命令。

Oracle的锁

    oracle可以提供最小的行级锁,在oracle中,锁的资源占用非常小,所以oracle默认开启事务,直到提交或回滚。 行级锁之前需要先加表结构共享锁 行级排他锁 阻止两个事务对同一行数据同时修改 被锁定行不可进行修改、删除 一个事务修改某一行数据时,要先获得这一行的行级锁,之后才能修改这行数据 事务提交或回滚后会释放行级锁 表级共享锁 对所有事务来说,对表的查询是共享的 阻止修改表结构 独占表级锁时,才能修改表结构 select …
    for update for update,指定查询去获取最新的数据,取某一行数据之前,要获得数据行的行级锁
相关热词搜索: