Oracle知识点新.docx

上传人:b****2 文档编号:758562 上传时间:2023-04-30 格式:DOCX 页数:22 大小:22.97KB
下载 相关 举报
Oracle知识点新.docx_第1页
第1页 / 共22页
Oracle知识点新.docx_第2页
第2页 / 共22页
Oracle知识点新.docx_第3页
第3页 / 共22页
Oracle知识点新.docx_第4页
第4页 / 共22页
Oracle知识点新.docx_第5页
第5页 / 共22页
Oracle知识点新.docx_第6页
第6页 / 共22页
Oracle知识点新.docx_第7页
第7页 / 共22页
Oracle知识点新.docx_第8页
第8页 / 共22页
Oracle知识点新.docx_第9页
第9页 / 共22页
Oracle知识点新.docx_第10页
第10页 / 共22页
Oracle知识点新.docx_第11页
第11页 / 共22页
Oracle知识点新.docx_第12页
第12页 / 共22页
Oracle知识点新.docx_第13页
第13页 / 共22页
Oracle知识点新.docx_第14页
第14页 / 共22页
Oracle知识点新.docx_第15页
第15页 / 共22页
Oracle知识点新.docx_第16页
第16页 / 共22页
Oracle知识点新.docx_第17页
第17页 / 共22页
Oracle知识点新.docx_第18页
第18页 / 共22页
Oracle知识点新.docx_第19页
第19页 / 共22页
Oracle知识点新.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Oracle知识点新.docx

《Oracle知识点新.docx》由会员分享,可在线阅读,更多相关《Oracle知识点新.docx(22页珍藏版)》请在冰点文库上搜索。

Oracle知识点新.docx

Oracle知识点新

DDL_DML_DQL

创建用户:

CREATEUSERMARTIN-------创建用户名

IDENTIFIEDBYmartinpwd------设定密码

DEFAULTTABLESPACEUSERS------设置表空间

TEMPORARYTABLESPACETEMP;-------临时表空间

授予权限:

GRANTCONNECTTOMARTIN;

CONNECT角色允许用户连接至数据库,并创建数据库对象。

GRANTRESOURCETOMARTIN;

RESOURCE角色允许用户使用,数据库中的存储空间。

GRANTCREATESEQUENCETOMARTIN;

此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中。

授予用户MARTIN操作TEST表对象的权限:

GRANTSELECTONTESTTOMARTIN;允许用户查询TEST表的记录。

GRANTALLONTESTTOMARTIN;允许用户插入、删除、更新和查询。

ALTERUSER命令可用于更改口令:

ALTERUSERMARTINIDENTIFIEDBYmartinpass;

DROPUSER命令用于删除用户:

DROPUSERMARTINCASCADE;

DDL:

创建表

createtabletable_name(

column1varchar2(32)primarykey,--列名类型(长度)修饰符primarykey代表该列为主键

column2varcahr2(20)notnulldefault'默认值',--notnull设定该列不能为空,default设定该列的默认值

column3number(5,3)unique--设定该列值唯一,不能重复

);

修改表

altertabletable_nameadd(columnvarchar2(20));--添加列

modify--修改列

remove--删除列

清空表

truncatetabletable_name;--清空之后不能回滚

删除表

droptabletable_name;

DML:

插入数据

insertintotable_name(column1,column2,....)values(value1,value2,value3...);--值必须与指定列一一对应

insertintotable_namevalues(value1,value2,value3...);--值必须与表定义结构一致

insertintotable_nameselectcolumn1,colum2...fromtable_name1where....--将从table_name1中查询到的结果插入到table_name中

修改数据

updatetable_namesetcolumn1=value1,column2=value2..wherecolumn3=value3and...

删除数据

deletefromtable_namewherecolumn1=value1and...

DQL:

查询数据

selectcolumn1,column2...fromtable_namewherecolumn1=value1and...

排序

orderbycolumndesc/asc--desc降序,asc升序

分组

groupbycolumnhavingcolumn1=value1--having是分组条件

查询条件

select...from...wherecolumn1in(value1,value2,value3)--当column1在括号中出现就将该记录查询出来

select...from...wherecolumn1betweenvalue1andvalue2--当column1的值在value1和value2之间时将该记录查询出来

select...from...wherecolumn1like'_value%'--模糊查询_代表一个字符,%代表多个字符

select...from...wherecolumn1isnull--当column1的值为null就将该记录查询出来

连接查询

左外连接-以左边表为基准根据on条件查找右边的表对应数据生成一个临时表供查询

select

...

from

table1t1

left(outer)join

table2t2

on

t1.column1=t2.column2

where

...

右外连接-以右边表为基准根据on条件查找左边表对应数据生成一个临时表供查询

select

...

from

table1t1

right(outer)join

table2t2

on

t1.column1=t2.column2

where

...

内连接-以两边表为基准,当一边出现空值时不选取该行数据

写法一

select

...

from

table1t1

innerjoin

table2t2

on

t1.column1=t2.column2

where

...

写法二

select

...

from

table1t1,

table2t2

where

t1.column1=t2.column2

and

...

全连接-一两边表为基准,当一边有值时查询改行,另一边以空值代替

select

...

from

table1t1

fulljoin

table2t2

on

t1.column1=t2.column2

where

...

exists()-当括号中查询有值时,该条记录将被查询出来,通常用exists来代替in

select*fromt_schoolsc

where

exists(

select1fromdualwheresc.id>4

查询并集-union-默认去重复行,如果要不去重复使用unionall

(select1fromdualwheresc.id=1)

union

(select1fromdualwheresc.id=2)

union

(select1fromdualwheresc.id=5)

union

(select1fromdualwheresc.id=6)

查询交集-intersect

(select*fromt_personwhereid>100)

intersect

(select*fromt_personwhereheight>1.70)

查询差集-minus

函数_锁_表分区

sysdate--获得系统当前时间

函数

to_date('2011-09-0209:

04:

00','YYYY-MM-DDHH24:

MI:

SS')--将字符串按照指定的格式转换为时间类型

to_char(sysdate,'YYYY-MM-DDHH24:

MI:

SS')--将时间对象按照指定的格式转换为字符串

add_months(sysdate,2)--为时间加上指定月份值

last_day(sysdate)--取当月最后一天

trunc(sysdate,'MM')--按指定格式截取时间,将指定格式之后的值都取0

lower('ABC')--将字符串转换为小写

upper('abc')--将字符串转为大写

substr('abcdefg',2,3)--将字符串从下标2开始截取3个字符

initcap('helLowoRld')--将字符串格式化,每个单词首字母大写,其余字符小写

trim('hello')--去掉字符串两端的空格字符

length('abc')--获取字符串的长度

decode--相当于java中的switch,当column的值为condition1时,取value1...如果找不到对应的condition,取defaultValue,如果找不到defaultValue,取null

decode(

column,

condition1,value1,

condition2,value2,

condition3,value3,

...

defaultValue

abs(-20)--取绝对值

ceil(12.01)--(13)取大于该小数的最小整数

floor(12.06)--(12)取小于该小数的最大整数

power(x,y)--求x的y次方

round(m,n)--将m值保留n位小数,对n+1位四舍五入

trunc(m,n)--将m值保留n位小数,不会对n+1位四舍五入

nvl(column,value)--当column不为null时,取column的值,否则取value值

nvl2(column,value1,value2)--当column不为空时,取value1,否则取value2

nullif(column1,column2)--当column1的值等会column2的值时,返回null,否则返回column1的值

avg(column)--求平均数

min(column)--取最小值

max(column)--取最大值

sum(column)--求和

count(column)--求总记录数

分析函数:

主要用来做累计排名

row_number()--直接累计排名,当值相同时排名也不相同

rank()--当值相同时,排名相同,后续记录跳跃相应的排名数

dense_rank()--当值相同时,排名相同,后续记录不跳跃

--使用时必须用over函数指定排名规则

row_number()over(orderbyheightdesc)ashe_order

锁是数据库用来控制共享资源并发访问的机制。

锁用于保护正在被修改的数据

直到提交或回滚了事务之后,其他用户才可以更新数据

行级锁

当执行insert,update,delete,select...from...forupdate

表级锁

共享锁:

允许多个用户同时锁定同一张表,锁定表之后其他用户只能查询数据,不能更新

locktabletable_nameinsharemode

排他锁:

在同一时间仅允许一个用户锁定一张表,其他用户要锁定表必须等待该用户释放锁,使用nowait不等待,直接报错

locktabletable_nameinexclusivemode

当两个事务相互等待对方释放资源时,就会形成死锁,Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁,右边是一个死锁的例子

表分区:

允许将一张表中的数据分成多个分区来存储,提高检索速度,保证数据安全.

范围分区

以表中一个列或一组列的值进行范围段划分来分区,该列尽可能的是数值或日期型

createtablet_employee(

idnumber(8)primarykey,

namevarchar(20),

salarynumber(10,2)

partitionbyrange(salary)(

partitionpa1valueslessthan(5000),

partitionpa2valueslessthan(10000),

partitionpa3valueslessthan(20000),

partitionpa4valueslessthan(maxvalue)--当列的值为null,也被划分到maxvalue分区

查询或删除的时候可以使用partition(分区名)来指定要查询的分区

select*fromt_employeepartition(pa4);

deletefromt_employeepartition(pa1);

散列分区

允许用户对不具有逻辑范围的数据进行分区,通过在分区键上执行HASH函数决定存储的分区,将数据平均地分布到不同的分区

partitionbyhash(salary)(

partitionp1,

partitionp2

列表分区

允许用户将不相关的数据组织在一起,按照指定列的值分类分区

createtablet_employee(

idnumber(8)primarykey,

namevarchar(20),

departmentvarchar2(20),

salarynumber(10,2)

partitionbylist(department)(

partitionjishubuvalues('技术部'),

partitioncaiwubuvalues('财务部'),

partitionxzrsvalues('行政部','人事部'),

partitionhwbvalues('海外部')

复合分区

范围分区与散列分区或列表分区的组合,可以建立子分区

添加分区

altertabletable_nameaddpartitionpartition_namevalueslessthan(...)--范围分区

altertabletable_nameaddpartitionpartition_namevalues(...)--列表分区

altertabletable_nameaddpartitionpartition_name;--散列分区

删除分区

altertabletable_namedroppartitionpartition_name;

截断分区

altertabletable_nametruncatepartitionpartition_name;

合并分区

altertabletable_namemergepartitionspartition1,partition2intopartitionpartition_name;

拆分分区

altertabletable_namesplitpartitionpartition_nameat(...)into(partitionp1,partitionp2)

数据库对象

数据库对象是逻辑结构的集合,最基本的数据库对象是表.

同义词

公有同义词可被所有的数据库用户访问。

CREATESYNONYMempFORSCOTT.emp;CREATEORREPLACESYNONYMemp_synFORSCOTT.emp;

私有同义词只能在其模式内访问,且不能与当前模式的对象同名。

CREATEPUBLICSYNONYMemp_synFORSCOTT.emp;

序列

序列是用于生成唯一、连续序号的对象,序列可以是升序的,也可以是降序的,使用CREATESEQUENCE语句创建序列

CREATESEQUENCEtoys_seq

STARTWITH10

INCREMENTBY10

MAXVALUE2000

MINVALUE10

NOCYCLE

CACHE10;

序列名.NEXTVAL返回序列的下一个值

序列名.CURRVAL返回序列的当前值

使用ALTERSEQUENCE语句修改序列,不能更改序列的STARTWITH参数

使用DROPSEQUENCE语句删除序列,如:

DROPSEQUENCEtoys_seq;

视图

视图以经过定制的方式显示来自一个或多个表的数据,视图可以视为“虚拟表”或“存储的查询”,创建视图所依据的表称为“基表”

视图的优点有:

提供了另外一种级别的表安全性

隐藏的数据的复杂性

简化的用户的SQL命令

隔离基表结构的改变

通过重命名列,从另一个角度提供数据

创建视图的语法:

CREATE[ORREPLACE][FORCE]VIEW

view_name[(alias[,alias]...)]

ASselect_statement

[WITHCHECKOPTION]

[WITHREADONLY];

在视图上也可以使用修改数据的DML语句,如INSERT、UPDATE和DELETE

视图上的DML语句有如下限制:

只能修改一个底层的基表

如果修改违反了基表的约束条件,则无法更新视图

如果视图包含连接操作符、DISTINCT关键字、集合操作符、聚合函数或GROUPBY子句,则将无法更新视图

如果视图包含伪列或表达式,则将无法更新视图

索引

创建标准索引

CREATEINDEXitem_indexONitemfile(itemcode)TABLESPACEindex_tbs;

重建索引

ALTERINDEXitem_indexREBUILD;

删除索引

DROPINDEXitem_index;

PL_SQL

PL/SQL

标量

|----数值

|----字符

|----布尔--booleanPL/SQL所特有的,不能用于sql语句中,不能作为表的字段类型

|----日期

lob

|----BLOB

|----CLOB

|----NCLOB

属性

|----%type--列类型[用户名.]表名.列名%type

|----%rowtype--行类型[用户名.]表名%rowtype

PL/SQL块

是PL/SQL程序的基本单元

主要由三个部分构成:

声明部分,可执行部分,异常处理部分

declare

/*声明变量*/

begin

/*可执行部分*/

exception

/*异常处理部分*/

end;

变量声明

变量名[constant(是否常量)]数据类型(长度)[:

=值];

变量赋值

1.:

=

2.selectcolumn1,column2,column3...intotemp1,temp2,temp3...from...where...

2.1into的变量顺序和类型必须跟查询出来的结果一致

2.2查询出来的结果只能是单条数据

条件判断

--if

ifuser_name='张三'then

DBMS_OUTPUT.PUT_LINE('user_name是张三');

endif;

--ifelse

ifb_output='张三'then

DBMS_OUTPUT.PUT_LINE('b_output是张三');

else

DBMS_OUTPUT.PUT_LINE('b_output不是张三');

endif;

--ifelsif

ifb_output='张三'then

DBMS_OUTPUT.PUT_LINE('b_output是张三');

elsifb_output='李四'then

DBMS_OUTPUT.PUT_LINE('b_output是李四');

else

DBMS_OUTPUT.PUT_LINE('b_output不是张三也不是李四');

endif;

--case相当于java中的switch

caseb_output

when'张三'then

DBMS_OUTPUT.PUT_LINE('b_output是张三');

when'李四'then

DBMS_OUTPUT.PUT_LINE('b_output是李四');

when'王强'then

DBMS_OUTPUT.PUT_LINE('b_output是王强');

else

DBMS_OUTPUT.PUT_LINE('b_output不是张三也不是李四也不是王强...');

endcase;

循环控制

loop

...

[exit|exitwhen]

...

endloop;

while...loop

...

endloop;

foriinxx...oooloop--变量由for循环来隐式定义,不需要在declare块中进行声明

...

endloop;

顺序控制

goto强制流转

null空语句,没有任何实际意义的语句

动态sql

指PL/SQL块在执行过程中动态的生成一端sql语句,并且进行执行

executeimmediatesql语句

into结果集变量

using参数;

异常处理

预定义异常

用户定义异常

需要在declare块中声明,通过raise关键字抛出异常

--异常处理

exception

whentoo_many_rowsthen

dbms_output.put_line('查询到的结果大于一行,请指定查询条件...');

whenmy_exceptionthen

dbms_output.put_line('user_name的值是张三,怎么可以是张三呢...');

游标_子程序和程序包

游标

相当于一个指针,指向某块内存,主要保存一段sql语句执行后的结果.

游标属性:

found当sql执行时,找到要执行的记录时返回true,否则返回false

notfound跟found相反,找到记录返回false,否则返回true

rowcountsql执行后影响的记录数

isopen判断游标是否打开(隐式游标获取到的永远是false)

访问游标属性游标名%属性

隐式游标

由数据库系统维护的游标,当执行了DML(insert,update,delete)语句之后由系统自动的开启和关闭游标

隐式游标的名称是SQL

显示游

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2