oracle从零开始.docx
《oracle从零开始.docx》由会员分享,可在线阅读,更多相关《oracle从零开始.docx(14页珍藏版)》请在冰豆网上搜索。
oracle从零开始
从零开始学Oracle—环境配置
(一)
(1)
文章发布人:
gxy 共164人阅读 文字大小:
[大中小] 文字背景色:
一、开始前的准备
1.启动Oracle
启动监听服务:
OracleOraHome90TNSListener
启动实例服务:
OracleServiceOrac
2.Oracle系统用户
Oracle三大系统用户
默认用:
system/welcome
超级用户:
sys/welcome 权限最大
普通用户:
scott/tiger
3.登录Oracle的方式
Windows窗口下的sqlplus的操作 运行->sqlplusw.exe
DOS下的sqlplus的操作 运行-> sqlplus.exe
登录Oracle但不连接数据库 运行->sqlplusw/nolog
connect用户名/密码@主机连接字符串 连接到指定用户
4.Oracle常用操作
showuser查看当前用户 select*fromtabwheretabtype='TABLE' 查看当前用户下的表
descdept 察看表dept的结构
quit/exit 退出
clearscreen 清除屏幕
setlinesize200 设置一行显示200个字符
setpagesize20 设置每页显示20行
spool文件名(spoolc:
abc.txt)作日志文件命令 spooloff
altersessionsetnls_date_format='yyyy-mm-dd';改日期的默认格式
conn/assysdba select*fromv$version;查看当前Oracle的版本
connsystem/welcomeselect*fromv$tablespace;查看表空间
5.表空间 用户表三者的关系
一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用
从零开始学Oracle—基本语法解析
(二)
(1)
文章发布人:
gxy 共167人阅读 文字大小:
[大中小] 文字背景色:
Oracle数据操作语言DML
接上一篇:
2.DML语句(数据操作语言)DataManupilateLanguage
select
insert
delete
update
特点:
<1>对数据起作用的
<2>这些语句的修改是在内存中发生的
要想改动存入库中必须要commit语句
查看当前用户的所有权限
select*fromsession_privs;
查看当前用户下的所有表
select*fromtabwheretabtype='TABLE';
3.TCL(事务控制语句)TransactionControlLanguage
commit; 提交 修改保存到数据库中
rollback;回滚 取消内存中的改动
savepoint;保存点分解事务的把事务变小
DDL语句会自动提交以前未提交的事务
关闭SQLplus工具也会自动提交未提交的事务的
事务--就是一个完整的对数据的DML操作
所有事务都是要明确的提交和回滚的
--转账
update账目表
set钱=钱-500
where帐号='A';
update账目表
set钱=钱+500
where帐号='B';
commit;
事务何时存在DML语句中除select以外都会有事务
《《《《《《《注意》》》》》/重复运行上一条SQL语句
commit; 结束上一个事务并且开始一个新的事务
updatestudentsetsal=nullwherexh=1000;
从零开始学Oracle-—约束(三)
文章发布人:
gxy 共145人阅读 文字大小:
[大中小] 文字背景色:
给表添加约束
主键约束-- 每个表要有主键,唯一的标识一行数据
非空约束
唯一性约束
外键约束
检查约束
查看一个表的约束:
selectconstraint_name,constraint_type
fromuser_constraints
wheretable_name='表名'
查看约束作用于那个字段:
select*fromuser_cons_columns
whereCONSTRAINT_NAME='约束名;
1.建立表的同时使用约束
createtablestudent(--学生表
xhnumber(4)primarykey,--学号主键
xmvarchar2(10)notnull,--姓名不能为空
sexchar
(2) check(sexin('男','女')),--性别
birthdaydateunique,--日期
salnumber(7,2)check(salbetween500and1000),--奖学金sal>=500andsal<=1000
classidnumber
(2)referencescla(id)
); --必须要先有cla表才对
--一定先建立班级cla表
2.建立约束的同时给约束指定名字,便于删除
createtablestu(--学生表
xhnumber(4)constraintpk_stuprimarykey,--学号是主键
xmvarchar2(20)constraintnn_stunotnull,--姓名非空
agenumber
(2)constraintck_stucheck(agebetween10and90),
birthdaydate,
shenfenzhengnumber(18)constraintuq_stuunique,--身份证唯一
classidnumber
(2)constraintfk_stureferencescla(id)--班级编号外键
--(引用的一定是另外表的主键或唯一性约束的字段)
);
3.建完表后加约束
添加主键约束:
altertablestudentaddconstraintpk_stuprimarykey(xh);
添加非空约束:
altertablestudentmodify(xmnotnull);
检查约束:
altertablestudentaddcheck(sexin('男','女'));
altertablestudentaddconstraintck_salcheck(salbetween500and1000));
添加外键约束:
altertablestudentaddconstraintfk_stu foreignkey(classid)referencescla(id);
添加唯一约束:
altertablestudentaddconstraint uq_sfzunique(shenfenzheng);
4.删除约束:
格式:
altertable表名dropconstraint约束名
altertablestudentdropconstraint fk_stu;
从零开始学Oracle—内建函数(四)
(1)
文章发布人:
gxy 共268人阅读 文字大小:
[大中小] 文字背景色:
SQL函数
单行函数:
返回值只有1个,可以出现在Select字句或Where字句中
分组函数:
返回值是多条记录
一。
单行函数:
1.ASCII
返回与指定的字符对应的十进制数;
SQL>selectascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;
A A ZERO SPACE
------------------------------------
65 97 48 32
2.CHR
给出整数,返回对应的字符;
SQL>selectchr(54740)zhao,chr(65)chr65fromdual;
ZHC
---
赵A
3.CONCAT
连接两个字符串;
SQL>selectconcat('010-','88888888')||'转23' 高乾竞电话fromdual;
高乾竞电话
----------------
010-********转23
4.INITCAP
返回字符串并将字符串的第一个字母变为大写;
SQL>selectinitcap('smith')uppfromdual;
UPP
-----
Smith
5.INSTR(C1,C2,I,J)
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1
SQL>selectinstr('oracletraning','ra',1,2)instringfromdual;
INSTRING
---------
9
6.length 返回字符串的长度;
7.LOWER 返回字符串,并将所有的字符小写
8.UPPER 返回字符串,并将所有的字符大写
9.RPAD和LPAD(粘贴字符)
RPAD 在列的右边粘贴字符
LPAD 在列的左边粘贴字符
SQL>selectlpad(rpad('gao',10,'*'),17,'*')fromdual;
LPAD(RPAD('GAO',1
-----------------
*******gao*******
不够字符则用*来填满
10.LTRIM和RTRIM
LTRIM(字符串,值) 删除字符串左边指定的值
RTRIM(字符串,值) 删除字符串右边指定的值
11.SUBSTR(string,start,count)
取子字符串,从start开始,取count个
12.REPLACE('string','s1','s2')
string 希望被替换的字符或变量
s1 被替换的字符串
s2 要替换的字符串
13.SOUNDEX
返回一个与给定的字符串读音相同的字符串
SQL>createtabletable1(xmvarchar(8));
SQL>insertintotable1values('weather');
SQL>insertintotable1values('wether');
SQL>insertintotable1values('gao');
SQL>selectxmfromtable1wheresoundex(xm)=soundex('weather');
XM
--------
weather
wether
14.ROUND和TRUNC
按照指定的精度进行舍入
SQL>selectround(55.5),round(-55.4),trunc(55.5),trunc(-55.5)fromdual;
ROUND(55.5)ROUND(-55.4)TRUNC(55.5)TRUNC(-55.5)
----------------------------------------------
56 -55 55 -55
15.Least('表达式1','表达式2','表达式3') 返回一组表达式中的最小值
16.TO_NUMBER 将给出的字符转换为数字
17.TO_DATE(string,'format')将字符串转化为ORACLE中的一个日期
18.NEXT_DAY(date,'day') 给出日期date和星期x之后计算下一个星期的日期
19..MONTHS_BETWEEN(date2,date1)两个日期相差的天数
20.Decode(字段1,值1,结果1,值2,结果2...,默认值)
21.nvl(表达式1,表达式2)表达式1为NULL,返回表达式2;不为NULL,返回表达式1。
注意两者的类型要一致
22.nvl2(a,b,c)
表达式1不为NULL,返回表达式2;
为NULL.返回表达式3。
表达式2和表达式3类型不同的话,表达式3会转换为表达式2的类型
23.nullif(expr1,expr2)->相等返回NULL,不等返回expr1
从零开始学Oracle—内建对象(五)
(1)
文章发布人:
gxy 共186人阅读 文字大小:
[大中小] 文字背景色:
1. 序列
查询当前用户下的序列:
select*fromuser_sequences
定义:
用来生成唯一、连续的整数的数据库对象,序列通常用来自动生成主键或唯一键的值、可升、可降序排列.
语法:
Create sequence序列名称 //从1开始每次自动增加1没有最大值
[starwith值] 指定要生成的第一个序列号,对于升序默认值为最小值、反之...
[increment by值] 间隔数
[maxvalue 值|nomaxvalue] 序列最大值,如果指定为nomaxvalue,则升序最大值为10的27次方,降序-1.
[minvalue 值|nominvalue] 序列最小值,-----------------------升序为1,降序为10的负26次方
[cycle|nocycle] cycle指序列到达最大或最小时,将从头开始生成值 nocycle值不在生成
[cache 值|nocache] 预先分配一组序列号,将其保存在内存中.默认缓存20个序列
访问序列方法:
currval和nextval --当前序列select序列名.currvalfromdual
更改序列:
Altersequence序列名
删除序列:
dropsequence序列名
注意-------------序列使用时需要先用nextval输出完以后再来使用
使用:
1.和表关联作为表的字段的值
a)createtablestudent(
xhnumber(4)primarykey,--学号
xmvarchar2(20)notnull--姓名
);
要求:
学号字段从1000开始每次增加4最大值9999
--建立序列
createsequencexh_seq
startwith1000--从1000开始
incrementby4 --每次增加4
maxvalue9999 --最大值9999
;
--使用SQL语句关联
insertintostudentvalues
(xh_seq.nextval,'Mike');
insertintostudentvalues
(xh_seq.nextval,'John');
insertintostudentvalues
(xh_seq.nextval,'Rose');
--特点:
能产生唯一的值,但是不能保证值在表中的连续性
b)createtableteacher(
teacherxhvarchar2(10)primarykey,
teachernamevarchar2(20)
);
要求:
教师的编号的格式是TH00001
TH00002
....
--建立序列
createsequenceteacher_seq
maxvalue99999;
-
insertintoteachervalues('TH'||
ltrim(to_char(teacher_seq.nextval,'00000')),
'张三');
insertintoteachervalues('TH'||
ltrim(to_char(teacher_seq.nextval,'00000')),
'李');
insertintoteachervalues('TH'||
ltrim(to_char(teacher_seq.nextval,'00000')),
'王');
从零开始学Oracle—性能对象(六)
(1)
文章发布人:
gxy 共111人阅读 文字大小:
[大中小] 文字背景色:
Oracle性能对象
要点:
分区必须是在创建表的结构时指定,分区方式一旦指定是不能改变的。
分区方式:
1范围分区
2散列分区
3复合分区
3列表分区
表分区的优点:
一、改善表的查询性能
二、表更容易管理,表的数据存储在多个部分,按分区加载和删除数据更快
三、便于备份和恢复
四、提高数据安全性
-----------注意:
要分区的表不能具有Long和Longraw数据类型
范围分区:
根据表的某个列或一组列的值范围,决定将数据存储在那个分区
createtableniegc_part
(
part_idintegerprimarykey,
part_datedate,
part_decvarchar2(100)
)
partitionbyrange(part_date)--根据日期分区
(
partitionpart_01valueslessthan(to_date('2006-01-01','yyyy-mm-dd'))tablespacedw1,
partitionpart_02valueslessthan(to_date('2007-01-01','yyyy-mm-dd'))tablespacedw2,
partitionpart_03valueslessthan(maxvalue)tablespacedw1
);
散列分区
散列分区通过指定分区编号来均匀分布数据的一种分区类型,因为通过在I/O设备上进行散列分区
,使行这些分区大小一致。
如将part_id的数据根据自身的情况散列地存放在指定的二个表空间中:
createtableniegc_part
(
part_idintegerprimarykey,
part_datedate,
part_decvarchar2(100)
)
partitionbyhash(part_id)
(
partitionpart_01 tablespacedw1,
partitionpart_02 tablespacedw2
);
从零开始学Oracle—PL/SQL(七)
(1)
文章发布人:
gxy 共170人阅读 文字大小:
[大中小] 文字背景色:
PL/SQL简介
PL/SQL(ProceduralLanguageSql,过程语言|SQL)是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言.
PL/SQL块是一段后台服务程序,它负责将数据从数据库中取出来,在PL/SQL块中进行处理,将处理的结果送到数据库.
优点:
1,支持SQL
2,支持面向对象编程(OOP)
3,更好的性能
4,可移置性
5,与SQL集成--支持所有SQL数据类型和Null值,另%type %rowType属性类型更加强了这种集成
6,安全性
PL/SQL块包括3个部分:
1,声明部分 --变量,游标,自定义异常,局部子程序
2,可执行部分 --执行命令,可嵌套子块
3,异常处理部分
1PL/SQL块
2 declare
3
4 begin
5 --SQL语句
6 --直接写的SQL语句(DML/TCL)
7 --间接写executeimmediate
8 --select语句
9 <1>必须带有into子句
10