Oracle学习笔记Word下载.docx
《Oracle学习笔记Word下载.docx》由会员分享,可在线阅读,更多相关《Oracle学习笔记Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
约束的分类8
约束类型的命名9
删除约束9
查看约束9
rownum9
视图9
创建视图9
删除视图9
替换视图9
不能更新视图的创建条件9
创建只读视图10
序列10
创建序列10
使用序列10
删除序列10
修改序列的增长幅度10
从哪开始(指定开始位置)10
同义词10
创建同义词:
10
删除同义词10
创建用户10
Oracle
在OracleSQLPlus中首先要进行环境变量设置:
1)setlinesize长度
2)setpagesize长度(修改每页显示记录的行数)
因为没法修改输入的内容,使用本机的记事本程序进行编辑,直接在命令窗口中输入"
ed文件名称"
,会提示新建文件,编辑完成之后就通过@文件名的方式进行执行,若执行其他文件则@路径,若后缀名为‘sql’的话,不用输入后缀也可以找到,默认的后缀名就是“*.sql”
显示现在正在连接的用户是哪个:
showuserselect;
得到数据库中全部表名称:
select*fromtab;
得到一个表的完整结构:
desc表名;
可以使用其他的用户连接,例如sys或system用户:
conn用户名/密码[ASSYSDBA|SYSOPER]
如果现在连接的是超级管理员(sys):
则在连接的最后必须写上ASSYSDBA,以系统管理员的身份登陆
如果访问别的用户下的表,则必须加上用户名,即:
表的完整名称:
“scott.emp”
UPPER()(将小写变成大写)
例:
SELECTUPPER('
smith'
)FROMDUAL;
----DUAL(虚拟表)
LOWER()(将小写变成大写)
SELECTLOWER('
HELLOWORLD'
)FROMDAUL;
initcap()(将单词的第一个字母变成大写)
concat()(字符串连接)
substr()(字符串截取):
截取点从0或1开始,效果是相同的,如果输入的数十负数,即表示倒着截取
length()(字符串长度)
replace()(字符串替换)
trim(’h’from‘helloworld’)(左右去)
instr():
找到指定字符的指定数值位置
ROUND()(四舍五入),也可指定小数的位数,负数时对整数的四舍五入
TRUNC()(截断小数):
不保留任何小数,也不进行四舍五入,也可指定小数点的保留位数
不写小数,从整位截
MOD()(取余)
日期-数字=日期
日期+数字=日期
日期-日期=数字(天数)
当前日期:
sysdate
MONTHS_BETWEEN():
求出给定日期范围的月数
ADD_MONTHS():
在指定日期上加上指定的月数,求出之后的日期
NEXT_DAY():
下个星期是几号(假设日期是星期三,要查星期五的日期,不是下个星期的星期五)
LAST_DAY():
求出给定日期的最后一天日期
转换函数:
TO_CHAR():
转换成字符串
1)TO_CHAR(hiredate,'
yyyy-mm-dd'
)时,例如5月会显示05,此时这个0为前导0.,若想去除前导0,则TO_CAHR(hiredate,'
fmyyyy-mm-dd'
)、
例如:
to_char(hiredate,’yyyy-mm-ddHH24:
mi:
ss’)
2)在数字钟加入符号,例如加逗号:
TO_CAHR(sal,'
999,99'
)------9表示一位数字;
加美元符号TO_CAHR(sal,'
$999,99'
);
根据本地加TO_CAHR(sal,'
L999,99'
)------L代表Local
TO_NUMBER():
转换成数字
TO_DATE():
转换成日期
NVL()转换一个空值为实际值
NVL2(1,2,3)如果1为空返回3,如果1不为空返回2
DECODE()相当于IF...ELSEIF...ELSE例DECODE(job,'
CLERK'
'
业务员'
MANAGER'
经理'
)
分组函数可以嵌套使用,但是在组函数嵌套使用的时候不能再出现分组条件的查询语句
selectdeptno,max(avg(sal))fromempgroupbydeptno;
是错误的,不能再查询deptno。
(条件不能直接获得时考虑子查询)
子查询:
可以出现在where子句,having子句,from子句;
可用在建表,插入,更新语句中;
也必须在()中编写代码,可以相当于是临时表放在from后,主查询,子查询可以在不同的表中得到数据
分三类:
1)单列子查询:
返回的结果是一列的内容,出现的几率最高
2)单行子查询:
返回多个个列,有可能是一条完整的记录
3)多行子查询:
返回多条记录
在子查询中,存在以下三种查询的操作字符(多行比较符):
1)IN-----指定一个查询的范围
2)ANY-----=ANY:
与IN的操作符功能完全一样
----->
ANY:
比里面最小的值要大
-----<
比最大的值要小
3)ALL----->
ALL:
比最大的值要大,NIT
ALL:
比最小的值要小
IN<
>
子查询可以进行多列子查询(一般不建议使用)
表的复制:
(此语法只在Oracle中起作用)
createtable表名称as子查询
createtablemyempasselect*fromemp;
上句复制的是表结构和表内容
如果后跟一个永远不可能成立的条件(例如where1==2),则值复制表结构,不复制表内容
事务处理:
就是保证数据操作的完整性,所有的操作要么同时成功要么同时失败
每一个连接到数据库的用户都表示创建了了一个session,一个session所作的修改不会立刻反应到数据库的真实内容之上,而是等待用户提交!
在数据库的操作中提供了以下的两个主要命令完成事务的处理:
提交事务:
commit
回滚事务:
rollback
如果事务已经被提交了,则肯定无法回滚
死锁:
一个session如果更新了数据库中的记录,其他session是无法立即更新的,要等待对方提交后才允许更新!
常用数据类型:
CLOB:
大对象,表示大文本数据,一般可以存放4G文本
BLOB:
大对象,表示二进制数据,最大可以存放4G例如:
电影,音乐,图片
表的建立:
CREATETABLE表名称(
字段名称1字段类型[默认值],
字段名称2字段类型[DEFAULT默认值],
........,
字段名称n字段类型[DEFAULT默认值],
表命名和列命名:
以字母开始
1-30个字符长度
只能包含A-Z,a-z,0-9,_,$和#
同一个用户下不能重名
不能用Oracle服务器中的保留字
大小写不敏感
增加列:
altertable表名称add(列的名称列的类型default默认值,列的名称列的类型default默认值.....)
注意:
不能指定新添加列的位置,新列将成为最后一列
修改表结构:
altertable表名称modify(列的名称列的类型default默认值)
如果表中存在很长的数据,则无法将表的长度缩小
modify改的是列的长度,类型,不能改列名
改列名(Oracle10之后):
altertable表名renamecolumn旧的列名称to新的列名称
修改表的名称(Oracle):
rename旧表名to新表名
查看本用户所拥有的表、视图、同义词和序列
select*fromuser_catalog
删除列:
altertable表名称dropcolumn(列名)
一次只能有一列被删除;
一旦一列被删除,它不能再恢复,最后一列不允许删除
表的重命名(只能在Oracle中使用):
rename旧的表名称to新的表名称
表的删除:
droptable表名称
一旦被执行,就不能撤回。
不仅删除记录也删除了表的结构
delete只删除记录,可以回滚
截断表(只删除记录,性能更好):
如果现在假设想要清空一张表的数据,但是同时又不需要回滚,可以立即释放资源就需要使用截断表,不触发表的删除触发器
truncatetable表名称
日期类型:
timestamp:
带小数秒的日期,是date类型的一种扩展
(读一致性)
脏读:
同一时间对同一数据的动作,数据的一致性不完整,一个用户所做的改变和另一个用户所做的改变冲突
脏数据:
锁(lock)(Oracle)
(自动上锁):
独占锁(排它锁):
不允许其他用户访问
共享锁:
允许其他用户访问
约束的分类
1)主键约束(primarykey):
表示是一个唯一的标识,并且不能为空
可以通过constraint指定一个约束的名字,例:
constraint名字primarykey(pid)
2)唯一约束(unique):
在表中只允许建立一个主键约束,而其他列不希望出现重复的话,则使用唯一约束
可以通过例如constraint名字unique(name)自己定义
3)检查约束(check):
检查一个列中插入的内容是否合法
例如年龄的取值范围:
check(agebetween0and150)
性别的取值范围:
check(sexin('
男'
女'
中'
))
手工命名:
constraint名字check(sexin('
4)非空约束(notnull):
姓名这样的字段里面的内容就不能为空,插入数据的时候必须插入内容
5)外键约束:
在两张表中进行约束操作
主-外键约束(foreignkey):
父表person
子表book
constraintperson_book_pid_fkforeignkey(pid)referencesperson(pid)
在子表中设置的外键在父表中必须是主键或者唯一键
删除时应该先删除子表在删除父表
强制删除:
droptablebookcasecadeconstraint(一般不使用)
希望一个表中的数据在删除时,可以自动删除其对应的子表的记录,这是可以使用级联删除:
constraintperson_book_pid_fkforeignkey(pid)referencesperson(pid)ondeletecasecade
添加约束语法:
用altertable语句:
添加或删除语句,但不修改它的结构
启用或禁用约束
用modify添加一个notnull约束
altertable表名addconstraint约束的名字约束的类型(约束字段)
用ALTERTABLEMODIFY语法为Employees表中Salary字段添加一个NOTNULL约束
altertableemployeesmodify(salaryconstraintemp_sal_nnnotnull)
约束类型的命名一定要统一:
1)primarykey:
主键字段_PK
2)unique:
字段_UK
3)check:
字段_CK
4)foreignkey:
父字段_子字段_FK
删除约束:
alerttable表名称dropconstraint约束名称
查看约束:
查询user_constraint表
rownum:
表示行号,实际上是一个列,但是这个列是一个伪列,此列可以再每张表中出现,本身采用自动编号
如果现在想要进行中间的截取操作,则只能采取子查询
视图:
一个视图就是封装了一条复杂的查询语句(是不应该包含真实数据的),视图的创建条件不应该更改(withcheckoption),视图是用来查询的,所以不应该允许更改(withreadonly)
创建视图:
createview视图名称as子查询
删除视图:
dropview视图名称
替换视图:
createorreplaceview视图名称as子查询
不能更新视图的创建条件:
createview视图名称as子查询withcheckoption
创建只读视图:
createorreplaceview视图名称as子查询withreadonly
序列:
自动增长
创建序列:
createsequence序列名称
CREATESEQUENCEsequence
[INCREMENTBYn]-----序列的增长幅度
[STARTWITHn]-----从指定开始位置开始
[{MAXVALUEn|NOMAXVALUE}]-----最大值
[{MINVALUEn|NOMINVALUE}]-----最小值
[{CYCLE|NOCYCLE}]-----是否循环
[{CACHEn|NOCACHE}]-----有无缓存
序列创建完成以后,所有的自动增长应该由用户自己处理,所以在序列中提供了一下的两种操作:
nextVal:
取的序列的下一个内容
currVal:
取的序列的当前内容
使用序列;
insertintotestseq(nest,curr)values(myseq.nextVal,myseq.currVal)---testseq为表名,myseq为序列名
删除序列:
dropsequence序列名称
修改序列的增长幅度(默认情况下序列从1开始):
incrementby长度
从哪开始(指定开始位置):
startwithn
同义词(只适用于Oracle):
可以让其他用户通过一个名称方便的访问‘用户名.表名称’
createsynonym同义词名称for用户名.表名称
删除同义词:
dropsynonym同义词名称
创建用户:
createuseridentifiedby密码
如果想创建用户,应该使用管理员登陆
创建后要为用户授session的权(grantcreatesessionto用户)
为用户授权:
grant权限1,权限2.....to用户