ORACLE分为服务端和客户端 ,我们一般只要求安装客户端就可以进行工作 ,(在WINDOWS操作系统下安装的) 。
1.安装的演示安装演示操作,基本选择默认 ,注意几个选项。
2.安装后的的配置文件的处理1 :tnsnames.ora目录
该配置文件在ORACLE安装目录下的\ora92\network\admin
2 :tnsnames.ora文件的格式
wzmkr=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=X.X.X.X)(PORT=1521))
)
(CONNECT_DATA=
(SID=wz97)
)
)
注意以下几点
wzmk:叫数据库连接串,在等入数据库时要引用它才可以进行 。名称可以有自己定义 ,但在tnsnames.ora配置文件中名称要唯一。
HOST/PORT :服务器的IP和ORACLE的端口(一般取默认端口1521)
SID :是数据库实例的唯一标识 ,最多只能是8个字母。SID和HOST就能确定你访问的是哪个数据库实例。
二 :ORACLE常用对象和DDL的简单介绍1.ORACLE常用对象ORACLE常用对象主要有 :表、索引、主键 、外键 、视图、同义词、序列 、触发器 、函数、过程等 。下面就结合DDL语句来介绍一下各个对象。
2.对表的基本操作DDL(数据定义语言)语句的介绍2.1.DDL作用用来创建 、删除 、更改数据模式对象的结构 ,具体的为 :
1.建立、删除 、更改表 、视图、索引 、主键 、外键等对象。
2.对特权和角色的授权和回收 。
3.建立审计选择。
4.在数据字典中增加注释 。
2.2.DDL语句DDL语句的关键词CREATE、DROP 、ALTER 、GRANT、REVOKE
下面就DDL第一点作用稍微的介绍一下CREATE 、DROP 、ALTER 、GRANT、REVOKE的用法 。
1 :表的操作
1.1 :建表DDL语句 :
CREATETABLEtest_001
(test_col_1VARCHAR2(4)NOTNULL,//字段名---字段类型---字段大小---可为空?
test_col_2NUMBER(3,0),//还有CHAR类型
test_col_3DATE)
PCTFREE10
INITRANS1
MAXTRANS255
TABLESPACEusers//有条件限制时可以指定表空间 :将表建立在某表空间上
STORAGE(
INITIAL65536
MINEXTENTS1
MAXEXTENTS2147483645
);
也可以结合DML语句来建立新表 ,主要用于对表进行备份 。语句为:
CREATETABLEtest_002ASSELECT*FROMtest_001[WHERE]...
CREATETABLEtest_002ASSELECTtest_col_1FROMtest_001[WHERE]...
CREATETABLEtest_002ASSELECT*FROMtest_001WHERE1=2;保留表结构
1.2:修改表结构DDL语句 :
增加列 :ALTERTABLEtest_001ADDtest_col_4VARCHAR2(3)[NOTNULL];
修改列 :ALTERTABLEtest_001MODIFYtest_col_4VARCHAR2(4);
要注意列的大小。当列宽度变小时 ,可能会报错,此时应该先将该列的数据先备份,再做修改 ,以免数据的丢失 。
删除列:ALTERTABLEtest_001DROPCOLUMNtest_col_4;
1.3 :删除表的DDL语句:
删除表:DROPTABLEtest_002;
1.4:修改表名的DDL语句 :
ALTER TABLE test_002 TO test_003;
2:索引 、主键、外键
索引:建立索引的目的就是为了提高SQL执行的效率
索引分为唯一索引和非唯一索引,唯一索引就其唯一性能唯一的确定数据库表中某一条记录 。能保证数据的唯一性约束
2.1:索引的建立
唯一索引建立DLL语句为 :
CREATEUNIQUEINDEXind_test_01ONtest_001
(test_col_1ASC,//ASC可以不写 ,数据库默认就为ASC
test_col_2ASC);
TABLESPACEusers//空间最好和表所在的空间不同提高INDEX的效率
非唯一索引建立DLL语句为 :
CREATEINDEXind_test_02ONtest_001
(test_col_1ASC,
test_col_2ASC);
2.2 :什么情况下索引 ,建立在哪列上
建对表中的那个或那些列上建索引,则要看DML语句中的WHERE字句。
例如 :我们有以下DML语句
SELECT*FROMtest_02WHEREtest_col_1=‘AAA’;
那么我们可以在表test_02的test_col_1上建立INDEX如下:
CREATEINDEXind_test_01ONtest_001(test_col_1);
2.3 :值得注意的是 :
注意1.索引建立后是要占用数据库空间的 ,所以索引越多也不一定是好事 。
注意2.在上例中test_col_1列的值为’AAA’在全表中的比例大于15%时,在该列上建立索引也是没有什么意义的 ,特别在查询test_col_1=’AAA’时 ,也就是说 ,当列值分布比较平均时建立的索引性能会提高很多。
注意3.唯一索引中NULL值不等于任何值 ,NULL!=NULL
2.4:索引的删除:
索引删除 :DROPINDEXind_test_02;
2.5 :主键、外键:
1.主键的建立:ALTERTABLEtest_01
ADDconstraintPK_test_01primarykey(test_col_1);
2.外键的建立:altertabletest_02
addconstraintFK_TEST_01foreignkey(test_col_1)
referencestest_01(test_col_1);
3.注意1 :主键的建立能约束表在该列上保证唯一性,所以重复的记录就不能INSERT进该表中
注意2:在建立外键时涉及到二个表 ,在上例中test_01表的test_col_1列必须是主键,才能在test_02.test_col_1表列上建立外键。外键建立后表test_02的test_col_1列的值只能是表test_01字段test_col_1值的子集 。
2.6 :主键、外键的删除:
DDL语句:altertabletable_namedropconstraintconstraint_name;
3 :对表的授权
GRANTSELECT/INSERT/DELETE/UPDATEONtest_001TOUSER1
4:视图
视图是一个逻辑结构 ,它从某个或多个表、其他视图(包括快照)中选择几个列的数据 ,而它本身并没有数据,它只是一个存储的查询,它不占用数据库空间,所以它只是表的子集 ,而不是真正的表,它的作用可以简化特定数据的存取 ,隐藏一些敏感字段等 。
建立视图的DDL语句 :
CREATEVIEWview_001ASSELECT…FROMTABLE_NAME[WHERE]….;
删除视图的DDL语句:
DROPVIEWview_001;
5:序列
序列是多个用户可以从其中产生唯一整数的数据库对象 。
序列建立DDL语句 :
CREATESEQUENCEseq_001
INCREMENTBY1//递增值可以为正或负
MAXVALUE100000//最大值
CYCLE//升序时达到最大值时 ,继续从最小值开始产生 ,降序时相反 。
CACHE20;//一次取从SEQUENCE中取出放到内存中的数目 。
6 :同义词
是一个对象的一个别名。
建立同义词的DDL语句 :
为本地的不同用户下的表建立同义词:
CREATE[PUBLIC]SYNONYMpub_001FORUSER1.TEST_001;
为远程的表建立同义词 :
CREATE[PUBLIC][email protected]_001;
从DDL语句中可以发现 :在没有见同义词时 ,我们要取USER1用户下TEST_001表的信息,就要SELECT*FROMUSER1.TEST_001…或SELECT*[email protected]_001…但在建立了同义词后,就可以直接如下引用SELECT*FROMpub_001… 。同时DDL语句中的关键词PUBLIC就定义为该同义词为公共的,每个数据库对象都可以引用 。
同义词的删除 :
DROP[PUBLIC]SYNONYMpub_001;
7:JOB
企业管理器的作业时间表组件,即作业(Job)。为数据库系统管理员在指定时间或在操作环境中基于事件自动执行任务提供了一种方法 。JOB可以执行需要操作系统命令或SQL语句的任何任务 。
建立JOB :
varnnumber;
begin
dbms_job.submit(:n,
‘OMSP_GHYFF_HUIDAN_JOB;’
,sysdate),
‘sysdate+1/96’);
commit;
end;
参数说明:
参数序列
参数值
说明
1
:n
ORACLE返回的JOB号
2
‘OMSP_GHYFF_HUIDAN_JOB;’
要执行的JOB过程
3
sysdate
什么时候开始执行
4
‘sysdate+1/96’
每阁多少时间执行一次
停JOB:
BEGIN
DBMS_JOB.BROKEN(14144,TRUE);
END;
起JOB
BEGIN
DBMS_JOB.BROKEN(14144,FALSE);
END;
强制执行指定JOB
begin
dbms_job.RUN(N);
commit;
end;
删除JOB
begin
dbms_job.REMOVE(N);
commit;
end;
可以在SQL-NAVIGATOR工具中实现以上操作 。
三 :ORACLE查询\更新\删除DML语句DML语句关键词主要为:SELECT 、INSERT、UPDATE、DELETE 。
1 :SELECT语句
A)简单查询
SELECT*FROMSERV_ACC_NBR
WHERESERV_ID=123456ANDSTS=’A’;
B)查询语句可以嵌套
SELECT*FROMSERV_NWKCALL
WHERESERV_IDIN
(SELECTSERV_IDFROMSERV_ACC_NBR
WHERENXX_NBR=‘AAAA’AND
LINE_NBR=’BBBB’AND
STS=’A’)AND
STS=’A’;
C)两个以上表之间的连接查询
selecta.TEST_COL_1,b.TEST_COL_1
fromtest_001a,test_002b
wherea.TEST_COL_1=b.TEST_COL_1(+);
(+)在B表中没有记录的就补空处理。
D)聚族函数
有以下几个常用的聚族函数:
COUNT(*)取总数 ,也可以写为COUNT(1)
MIN(字段) 、MAX(字段名)取最小(大)字段
AVG(字段名)取平均值
DISTINCT(字段名)返回该列的各类值一个
TO_CHAR(DATE字段名,'YYYY-MM-DD HH24:MI:SS')转化成字符型
NVL(EXPR1, EXPR2),
解释:
IF EXPR1=NULLRETURN EXPR2
ELSERETURN EXPR1
DECODE(AA,V1,R1,V2,R2....)
解释:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSERETURN NULL
举例:SELECTDISTINCT(col_1)fromtest_01[where];
E)GROUPBY、HAVING、ORDERBY
SELECT字段名1, [字段名2…]
FROM 表名1, [表名2…] GROUP BY字段名1,[表名2…]
[HAVING COUNT(*)>1] ;
2 :INSERT语句
A)INSERTINTOTEST_01(TEST_COL_1,…)VALUES(‘A’…);
B)INSERTINTOTEST_01VALUES(‘A’…);
C)INSERTINTOTEST_01(TEST_COL_1,…)SELECT…FROMXXXX;
D)INSERTINTOTEST_01SELECT…FROMXXXX;
3 :UPDATE语句
A)UPDATETEST_01SETTEST_COL_1=‘BBB’
WHERETEST_COL_2=‘BBB’;
B)UPDATETEST_01SETTEST_COL_1=‘BBB’;
C)UPDATETEST_01SETTEST_COL_1=‘BBB’
WHERETEST_COL_2IN
(SELECTCOL_XFROMTABLE_NAME[WHERE]);
4 :DELETE语句
A)DELETEFROMTEST_01WHERE….
B)DELETEFROMTEST_01WHERETEST_COL_1IN(SELECT…..);
5:TURNCATE语句
A)TRUNCATETEST_01;[清空表里的所有记录, 保留表的结构]
6 :IN 、NOTIN、LIKE、NOTLIKE、EXISTS 、NOTEXISTS 、UNION、MINUS、INTERSECT(交集)等操作符
A)SELEST*FROMSERV_ACC_NBRWHERESERV_IDIN(1,2,3,4,5,6);
B)SELEST*FROMPRODWHEREPROD_IDNOTIN(1,2,3,4,5,6);
C)SELEST*FROMPRODWHERENAMELIKE‘%aaa%’;
D)SELEST*FROMPRODWHERENAMENOTLIKE‘%aaa%’;
E)SELECT1FROMDUALWHEREEXISTS
(SELECT1FROMSERV_ACC_NBR
WHERESERV_ID=1ANDSTS=’A’);
F)SELECTTEST_COL_1FROMTEST_01
UNION/UNIONALL
SELECTTEST_COL_1FROMTEST_02;
G)SELECTTEST_COL_1FROMTEST_01
MINUS
SELECTTEST_COL_1FROMTEST_02;
H)SELECTTEST_COL_1FROMTEST_01
INTERSECT
SELECTTEST_COL_1FROMTEST_02;
7 :以上SQL语句对表都加上了行级锁 ,确认完成后 ,必须加上事物处理结束的命令 COMMIT 才能正式生效,否则改变不一定写入数据库里 。如果想撤回这些操作 ,可以用命令 ROLLBACK 复原。
。