Oracle常识基础(一)

  1. 云栖社区>
  2. 博客>
  3. 正文

Oracle常识基础(一)

技术小胖子 2017-11-02 21:38:00 浏览522
展开阅读全文
一.Oracle数据类型    1.字符数据类型      .>   char:可以存储字母数字值,长度在1到2000个字节。      .>   varchar2:存储可变长度的char类型字符串,大小在1到4000个字节范围内。       .>   long:存储可变长度的字符数据,最多存储2GB。     long类型的使用限制:             **************************************     *{     *..  一个表中只有一列可以为long数据类型。     *..  long列不能定义为唯一约束或主键约束。     *..  long列上不能建立索引。     *..  过程或存储过程不能接受long数据类型的参数。     *}     ***************************************    2.数字数据类型    .>   number:存储正数,负数,零,定点书和精度为38位的浮点数。         number类型的格式:       number[(p[,s])]             其中p为精度,表示数字的总位数; s为范围,表示小数点右边的位数,它在-84至127之间。    3.日期时间数据类型    .>   date:存储表的日期和时间数据,使用7个字节固定长度,        每个字节分别存储世纪,年,月,日,小时,分和秒;值从公元前4712年1月1日到公元9999年12月31日。        {           Oracle中的sysdate函数功能是返回当前的日期和时间。        }    .>   timestamp:存储日期的年,月,日以及时间的小时,分和秒值。其中秒值精确到小数点后6位,同时包含时区信息。        {           Oracle中的systimestamp函数功能是返回当前日期,时间和时区。        }    4.raw和long raw数据类型(二进制数据)    .>  raw: 存储基于字节的数据。最多存储2000个字节,使用需指定大小。raw数据类型可以建立索引。    .>  long raw: 存储可变长度的二进制数据。最多能存储2GB;不能索引。与long类型的限制同效。    5.lob数据类型('大对象')        ***********************************        * lob类型可以存储多达4GB的非结构化信息。        * Oracle中的表可以有多个lob列,每个lob列可以是不同的lob类型。        ***********************************    .>  clob: 存储大量的单字节字符数据和多字节字符数据。例:非结构化的XML文档。    .>  blob: 存储较大的二进制对象。例:图形,视频,音频等。    .>  bfile: 文件定位器;指向位于服务器文件系统是的二进制文件(存储一个文件路径)。         -----------------------------------------------------------------------------------------------------------------------    6.Oracle中伪列    .> rowid: 返回行地址,可用来定位表中的一行。可以唯一地标识数据库中的一行。     重要的用途     ****************************     *..  能一最快的方式访问表中的一行     *..  能显示表的行是如何存储的     *..  可以作为表中行的唯一标识     ****************************    .> rownum: 对于一个查询返回的每一行进行标识;可用于限制查询返回的行数。(不是数据表的实际列)       二.Oracle中的sql操作符    .>算数操作符:     包括: +(加),-(减),*(乘),/(除)      *和/具有相同的优先级,+和-j具有相同的优先级,*和/的优先级高于+和-。可用小括号来控制计算顺序。    .>比较操作符:     包括:=(相等),!=(不相等),<(小于),>(大于),<=(小于等于),>=(大于等于)           between....and...(检查是否在两个值之间)           in(与列表中的值相匹配)           link(匹配字符模式<模糊匹配>)           is null(检查是否为空)    .>逻辑操作符:     包括:          and(与),or(或),not(非)    .>集合操作符:     包括:          union(联合):返回两个查询选定的所有不重复的行。          union all(联合所有):合并两个查询选定的所有行,包括重复的行。          intersect(交集):返回两个查询共有的行。                 minux(减集):返回有第一个查询选定但是没有被第二个查询选定的行。    .>连接操作符:          || : 将两个或多个字符串合并成一个字符串,或者将一个字符串与一个数值合并在一起。          操作符的优先级    ************************************************    *算数操作符  高    *连接操作符  |    *比较操作符  |    *not逻辑操作符  |             *and逻辑操作符  |    *or逻辑操作符           低                                   ************************************************       三.SQL函数    .>日期函数     add_months(d,n)<d是日期,n是月数>:返回指定日期加上指定月数后的日期值。     months_between(d1,d2)<d1,d2都是两个日期>:返回两个日期之间的月数。     last_day(d)<d是日期>:返回指定日期当月的最后一天的日期值。     round(d,[fmt])<d是日期,fmt指定格式模型>:返回日期值,此日期四舍五入为格式模型指定的单位。       (fmt是一个选项,默认舍入为最靠近的那一天。       如果格式为‘year’则舍入到年的开始,即1月1日;       如果格式为‘month’则舍入到月的第一天;       如果格式为‘day’则舍入到最靠近的星期天。       )         next_day(d,day)<d是日期,day指定周内任何一天 如‘星期一’>:返回指定的下一个星期几的日期。     trunc(d,[fmt])<d是日期,fmt指定格式模型>:返回日期值,指定日期截断为格式模型指定的单位的日期。       (与round函数类似,不同的是它只舍不入。)     extract(fmt from d)<fmt指定格式模型,d是日期>:提取日期时间类型中的特定部分。         (fmt取值可以是:year,month,day,hour,minute,second;注意此处的格式不能使用单引号。)    .>字符函数        函数     说明  输入         输出结果     initcp(char)       首字母大写 select initcap('hell0'from dual     Hello     lower(char)    转换为小写 select lower('FUN'from dual      fun     upper(char)    转换为大写 select upper('sun'from dual      SUN     ltrim(char,set)    左剪裁  select ltrim('xyzadams','xyz'from dual    adams     rtrim(char,set)    右剪裁  select rtrim('xyzadams','ams')from dual            xyzad      translate(char,from,to)   按字符翻译 select translate('jack','abcd','1234'from dual   j12k     peplace(char,search_str,replace_str) 字符串替换 select replace('jack and jue','j','bl'from dual  jack and blue     instr(char,substr[,pos])  查找子串位置    select instr('worldwide','d'from dual     5      substr(char,pos,len)   取子字符串      select substr('abcdefg',3,2) from dual     cd     concat(char1,char2)   连接字符串      select concat('Hello','world'from dual     Helloworld      =================================     ..  chr(int)<int是ASCII码>:根据ASCII码返回对应的字符。     ..  lpad(str,int,char)和rpad(str,int,char)<str是源字符串,int指定总长度,char是填充的字符>:用指定的字符(左|右)填充源字符串到指定长度。     ..  trim([[leading|trailing] trim_char] from trim_sourse)<trim_char指定裁剪的字符,trim_sourse是源字符串>      (       此函数组合了ltrim和rtrim的功能。       leading选项时与ltrim相似,裁减与trim_char相等的开头字符。       trailing选项时与rtrim相似,裁减与trim_char相等的结尾字符。      )     ..  length(str)<str是字符串>:返回字符串的长度。     ..  decode(expr,search1,trsult1,search2,trult2...[,default])<expr是字符变量或数据表字段,search是expr的预期值,trsult是返回值,default是无匹配是返回的值>      (       decode函数进行逐个值的替换。      )     .>数字函数     函数  说明  输入     输出结果     abs(n)  取绝对值 select abs(-15) from dual  15     ceil(n)  向上取整 select ceil(44.778) from dual  45     sin(n)  正弦  select sin(1.571) from dual  0.999999979     cos(n)  余弦  select cos(0) from dual   1     sign(n)  取符号  select sign(-32) from dual  -1     floor(n) 向下取整 select fllor(100.2) from dual  100     power(n) m的n次幂 select power(4,2) from dual  16     mod(m,n) 取余数  select mod(10,3) from dual  1     round(m,n) 四舍五入 select round(100.256,2) from dual 100.26     trunc(m,n) 截断  select trunc(100.256,2) from dual 100.25     sqrt(n)  平放根  select sqrt(4) from dual  2    .>转换函数     to_char(d|n[,fmt])<d是日期,n是数字,fmt是指定日期或数字的格式>:将指定的日期或数字转换成字符串(varchar2)。     to_date(char[,fmt])<char是日期格式的字符串,fmt是日期的格式>:将charvarchar数据类型转换为日期类型。     to_number(char)<char是包含数字的字符串>:将包含数字的字符串转换为数字。    .>其他函数     nvl(expression1,expression2)<exprission1是变量或数据表字段,exprission2是一个值>:将空值替换为指定的值。      (       如果expression1为NULL,则nvl返回expression2       如果expression1不为NULL,则nvl返回expression1       <sexpression2的类型将转换为expression1的类型>      )     nvl2(expression1,expression2,expression3)<exprission1是变量或数据表字段,exprission2和exprission3是一个值>:与nvl类似      (       如果expression1不为NULL,则nvl返回expression2       如果expression1为NULL,则nvl返回expression3      )     nullif(expr1,expr2)<expr1,expr1分别为表达式>:比较两个表达式,如果相等,则返回空值(null),否则返回expr1。    .>分组函数     avg(column)<column是列名>:返回参数中指定列的平均值。     min(column)<column是列名>: 返回参数中指定列的最小值。     max(column)<column是列名>: 返回参数中指定列的最大值。     sum(column)<column是列名>: 返回记录集中值的总和。     count([distinct]*|column[,column..])<distinct选项指定去除重复项,column是列名>: 返回记录集中的行数。     <group by子句用于将信息表化分为组,having字句用来指定group by的检索条件>    .>分析函数     row_number() over ([partition by columnorder by clause[,多列] [desc|esc])<column指定分组列名,clause指定排列列名>:为有序组中的每一行(化分部分的行或查询返回的行)返回一个唯一的排序     值,序号由order by字句指定,从1开始。(值相同,而排位不相同)        rank () over ([partition by columnorder by clause[,多列] [desc|esc])<column指定分组列名,clause指定排列列名>:计算一个值在一组值中的排位,排位是以1开头的连续整数,具有相等值的行排     位相同,序数随后跳跃相应的数值。(值相同,排位相同,排位有可能不连续)        dense_rank() over ([partition by columnorder by clause[,多列] [desc|esc])<column指定分组列名,clause指定排列列名>:计算一个行在一组有序行中的排位,排位是以1开头的连续整数,具有相同     值的排位相同,并且排位是连续的。(值相同,排位相同,排位连续)       四.Oracle锁     锁定是数据库用来控制共享资源并发访问的机制。    .>行级锁(用于特定行)     行级锁是一中排他锁,防止其他事务修改此行,当是不会阻止读取此行的操作。     在使用insert,update,deleteselect ...for update等语句时,Oralce会自动应用行级锁定。     select...for update语句允许用户每次选择多行记录进行更新,这些记录会被锁定,且只能有发起查询的用户进行编辑。只有在回滚或提交事务后,锁定才会释放,其他用户才可以编辑这些记录。     {      select ...for update [of column_list] [wait n | nowait ]<column_list是列的列表,n是等待的秒数,nowait指定不等待>      > of 子句用于指定即将更新的列,即锁定行上的特定列。      > wait 子句指定等待其他用户释放锁的秒数,防止无限制的等待。     }    .>表级锁(用于整个表)     表级锁定将保护表数据,在事务处理过程中,表级锁会限制对整个表的访问。可以使用lock table语句显示地锁定表。表级锁用来限制对表执行添加,更新和删除等修改操作。            {      lock table <table_name> in <lock_mode> mode [nowait];<table_name是锁定表的名称,lock_mode是锁定的模式,nowait指定不等待>      >lock_mode是锁定的模式。      >nowait 关键字用于防止无限期的等待其他用户释放锁。      (      表级锁的模式包括:       >行共享(row share,rs): 允许其他用户访问和锁定该表,但是禁止排他锁定整个表。       >行排他(row exclusive,rx):与行共享相同,同时禁止其他用户在此表上用共享锁。       >共享(share, s):仅允许其他用户查询表中的行,但不允许插入,更新和删除。       >共享行排他(share row exclusive,srx):执行比共享锁更多的限制。防止其他事物在表上应用共享锁,共享排他锁以及排他锁。       >排他(exclusive,x):对表执行最大限制。除了允许其他用户查询该表的记录,排他锁防止其他事务对表做任何更改或在表上应用任何类型的锁。       )      * 执行commitrollback命令可以释放锁定。     }    五.Oracle表分区           表分区的优点:      ..  改善表的查询性能。      ..  表更容易管理。      ..  便于备份和恢复。       ..  提高数据安全性。    .>范围分区     范围分区根据表的某一列或一组列的值范围,决定数据存储在那个区上。     在create table语句中增加parition子句可以创建表分区。     语法:     partition by rang (column_name)     (      partition part1 value less than(range1) [tablespace tbs1],      partition part2 value less than(range2) [tablespace tbs2],      ......       partition partn value less than(MAXVALUE) [tablespace tbsN]     );     其中:      column_name:是以其为基础创建范围分区的列,特定列的该列值称为分区键。      part1..partn:是分区的名称。      range1...MAXVALUE:是分区的边界值。      tbs1...tbsn:是分区所在的表空间(可选项)。    .>散列分区     散列分区通过分区键值上执行一个散列函数来决定数据的物理位置。(散列分区把记录平均分布到不同的分区,减少了磁盘I/O争用的可能性)     语法:     partition by hash (column_name)     partitions number_of_partitions [store in (tablespace_list)];     或     partition by hash (column_name)     (      partition part1 [tablespace tbs1],      partition part2 [tablespace tbs2],      .....      partition partn [tablespace tbsn]     )     其中:     column_name:是以其为基础创建散列分区的列。     number_of_partitions:是散列分区的数目,使用这种方法系统会自动生成分区的名称。     tablespace_list:指定分区使用的表空间,如果分区数目比表空间的数目多,分区将会以循环的方式分配到表空间中。    .>复合分区     复合分区是范围分区和散列分区的结合。     语法:     partition by rang (column_name1)     subpartition by hash (column_name2)     subpartitioins number_of_partitions [store in (tablespace_list)]     (      partition part1 value less than(range1) [tablespace tbs1],      partition part2 value less than(range2) [tablespace tbs2],      ......       partition partn value less than(MAXVALUE) [tablespace tbsN]     )      其中:     column_name1:是以其为基础创建范围分区的列。     column_name2:是以其为基础创建散列分区的列。     number_of_partitions:是散列分区的数目。     part1..partn:是分区的名称。     range1...MAXVALUE:是分区的边界值。    .>列表分区     列表分区允许用户明确地控制行到分区的映射。     语法:     partition by list (column_name)      (        partition part1 values (values_list1),       partition part2 values (values_list2),       ....      partition partn values (DEFAULT)     )     其中:     column_name:是以其为基础创建列表分区的列。     part1..partn:是分区的名称。      values_list:是对应分区键值的列表。     DEFATLT:关键字允许存储前面的分区不能存储的记录。    ***************************************************************    *在分区表中插入记录:与在普通表中插入数据完全相同。    *在分区表中查询记录:select * from 表名 partition (分区名)    *删除分区中的记录: delete from 表名 partitioin (分区名)    ***************************************************************       <*>分区维护操作    .>添加分区     alter table ... ADD partition语句用于在现所有的最后一个分区(称为'高'端)之后添加新的分区。     例:     alter table sales add partitions p4 values less than (4000);    .>删除分区     alter table ... drop partition 语句用于删除分区。(删除分区时,分区中的数据也随之删除)     例:     alter table sales drop partition p4;    .>截断分区     alter table ... truncate partition 语句用于截断分区,截断分区将删除分区中的所有记录。     例:     alter table sales truncate partition p3;    .>合并分区     合并分区可将范围分区表或复合分区表的两个相邻分连接起来。结果分区将继承被合并的两个分区的较高上界。     语法:     alter table table_name     merge partitions partitions1_name,partitions2_name     into partition3_name;     其中:      table_name:是表名。     partitions1_name,partitions2_name:是已有分区。     partitions3_name:合并到分区的名称。    .>拆分分区     使用split partition语句在表的开头或中间添加分区。拆分分区允许用户将一个分区拆分为两个分区。当分区过大,可以对分区进行拆分。     语法:     alter table table_name split partition partiton_name at (value)     into (partition partiton1,partition partiton2);     其中:     table_name:是表名。     partiton_name:已有分区名。     value:拆分分隔值。     partition partiton1,partition partiton2:表示拆分后的新分区。    六.同义词     同义词是数据库对像的一个别名,这些对象可以是表,视图,序列,过程,函数,程序包,甚至其他同义词。      同义词用途:     {      .. 简化sql语句      .. 隐藏对象的名称和所有者      .. 为分布式数据库的远程对象提供了位置透明性      .. 提供对象的公共访问      }     同义词允许应用程序访问数据库对象,不论哪个用户或哪个数据库拥有该对象。但是同义词不能代替权限,在使用同义词前要确保用户已得到访问对象的权限。     可以通过同义词执行select,insert,update,delete,lock table,grantrevoke等语句。同义词只是表的一个别名,因此对它的所有操作都会影响到表。    .>私有同义词     私有同义词只能被当前模式的用户访问。     私有同义词名称不可与当前模式的对象名称相同。     要在自身的模式创建私有同义词,用户必须拥有create sysnonym系统权限。     要在其他用户模式创建同义词,用户必须拥有create any synonym系统权限。     语法:     create [or replace] synony [schema.]synonym_name for [schema.]object_name     其中:     or relaoce:表示在同义词存在的情况下替换该同义词。     synonym_name:表是要创建的同义词的名称。     object_name:指定要为之创建同义词的对象的名称。    .>公有同义词     公有同义词可被所有的数据库用户访问。     创建公有同义词,用户必须拥有greate public synonym系统权限。     create [or replacepublic synonym synonym_name for [schema.]object_name     其中:     or relaoce:表示在同义词存在的情况下替换该同义词。     synonym_name:表是要创建的同义词的名称。     object_name:指定要为之创建同义词的对象的名称。    <*>删除同义词     drop synonym语句用于从数据库中删除同义词。要删除同义词用户必须有相应的权限。     语法:     drop [public] synonym [schema.]synonym_name;    七.序列     序列是用来生成唯一,连续的整数的数据库对象。     序列通常用来自动生成主键或唯一的值。     序列可以按升序排列,也可以按降序排列。     语法:     create sequence sequence_name     [stare with integer]     [increment by integer]     [maxvalue integer|nomaxvalue]     [minvalue integer|nominvalue]     [cycle|nocycle]     [cache integer|nocache];     其中:     sequence_name:是创建的序列名称。     stare with:指定要生成的第一个序列号。     increment by:用于指定序列好之间的间隔。     maxvalue:指定序列可以生成的最大值。     nomaxvalue:如果指定了nomaxvalue,oracle将升序序列的最大值设为10的27次方;将降序序列的最大值设为-1。     minvalue:指定序列可以生成的最小值。     nominvalue:无最小值,oracle将升序序列的最小值设为1;将降序序列的最小值设为10的-26次方。     cycle:指定序列在达到最大值或最小值后,将继续从头开始生成值。     nocycle:指定序列在达到最大值或最小值后,将不能在继续生成值。这是默认选项。     cyche:使用cyche选项可以预先分配一组序列号,并将其保存在内存中。这样可以更快地访问序列号,但用完缓存中的所有序列号,Oralce将生成另一组数值,并将其保留在缓存中。     nocyche:不缓存序列号。 如果创建序列时忽略了cyche和nocyche选项,Oracle将默认缓存20个序列号。    <*>访问序列            语法;     sequence_name . nextval|currval     其中:     sequence_name:是已创建的序列名称。     nextvla:创建序列后第一次使用nextval时,将返回该序列的初始值。以后在引用nextval时,将使用increment by子句的值来增加序列值,并返回这个新值。     currval:返回序列的当前值。    <*>更改序列     alter sequence 命令用于修改序列的定义。     {      .. 设置或删除minvalue或maxvale。      .. 修改增量值。      .. 修改缓存中的序列号的数目。     }     语法:     alter sequence [schema.]sequence_name     [increnment by integer]     [maxvalue integer|nomaxvalue]     [minvalue integer|nomaxvalue]     [cycle|nocycle]     [cache ingeter|nocache];        注意:不能修改序列的start with参数。    <*>删除序列     drop sequence命令用于删除序列。     语法:     drop sequence 序列名   


     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360657,如需转载请自行联系原作者


网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注