设为首页 收藏本站
查看: 925|回复: 0

[经验分享] Oracle培训(三十)——Oracle 11g 第十二章知识点总结——其他数据库对象

[复制链接]

尚未签到

发表于 2016-8-6 06:03:21 | 显示全部楼层 |阅读模式
Oracle培训(三十)——Oracle 11g 第十二章知识点总结——其他数据库对象



  
  知识点预览
  
  复习
  其他数据库对象
  
  复习
  
  

--序列
Create sequence seq_name
--综合练习
--社区网站 人人网
--站内信系统
--会员
--member
--id主键自动增长
--namenot null
--password
--gender默认值 0, 1
--introduction
--emailunique
--logindate date
create table member
(
idnumber(6) primary key,
namevarchar2(20) not null,
passwordvarchar2(16) default('123456'),
genderchar(1) check(gender in ('0', '1')),
introductionvarchar2(1000) null,
emailvarchar2(20) not null unique,
logindatedate
);
--gender:0女 1男
insert into membervalues(seq_wgb_member.nextval, '温国兵', 'wgb', '1', 'I am unique!','wgbno27@163.com', sysdate);
insert into membervalues(seq_wgb_member.nextval, '姜国彦', 'jgy', '1', '嘿嘿', '123465@163.com', sysdate);
insert into member values(seq_wgb_member.nextval,'熊子睿', 'xzr', '1', '哈哈', '123447@163.com', sysdate);
insert into membervalues(seq_wgb_member.nextval, '李智鹏', 'lzp', '1', '呵呵', '124556@163.com', sysdate);
insert into membervalues(seq_wgb_member.nextval, '朱家敏', 'zjm', '1', '哇哇', '123232@163.com', sysdate);
--信
--message
--id主键自动增长
--titlenot null
--contentnot null
--to_member外键
--from_member外键
--face_id外键
--commons_id外键
--status记录状态 当前这封信有没有读到/有没有被回复 (1 2 3) case decode not null
--status0 inbox 1 outbox 2 当前这封信被读到 3 当前这封信没被读到 4 被回复 5 没有被回复
create table message
(
idnumber(6) primary key,
titlevarchar2(30) not null,
contentvarchar2(1000) not null,
to_membernumber(6),
from_membernumber(6),
face_idnumber(6),
commons_idnumber(6),
statusnumber(2),
constraintwgb_message_toMember_FK foreign key(to_member) references member(id),
constraintwgb_message_fromMember_FK foreign key(from_member) references member(id),
constraintwgb_message_faceId_FK foreign key(face_id) references faces(id),
constraintwgb_message_commonID_FK foreign key(commons_id) references commons(id)
);
insert into messagevalues(seq_wgb_message.nextval, '欢迎入学', '今天是开学的第一天 加油', 3, 2, 11, 5, 0);
insert into messagevalues(seq_wgb_message.nextval, '同学会', '今天是同学会 好开心', 5, 3, 4, 8, 1);
insert into messagevalues(seq_wgb_message.nextval, '饭卡掉了', '悲剧的一天', 4, 6, 10, 2, 0);
insert into messagevalues(seq_wgb_message.nextval, '打篮球', '强身健体', 6, 4, 11, 5, 1);
--表情
--faces
--id主键自动增长
--face文字 微笑 哭 --not null
create table faces
(
idnumber(6) primary key,
facevarchar2(10) not null
);
insert into facesvalues(seq_wgb_faces.nextval, '微笑');
insert into facesvalues(seq_wgb_faces.nextval, '哭');
insert into facesvalues(seq_wgb_faces.nextval, '大笑');
insert into facesvalues(seq_wgb_faces.nextval, '憨笑');
insert into facesvalues(seq_wgb_faces.nextval, '抓狂');
insert into facesvalues(seq_wgb_faces.nextval, '大兵');
insert into facesvalues(seq_wgb_faces.nextval, '酷');
insert into facesvalues(seq_wgb_faces.nextval, '悲伤');
insert into facesvalues(seq_wgb_faces.nextval, '难过');
insert into faces values(seq_wgb_faces.nextval,'开心');
--常用语
--commons
--id主键自动增长
--word文字 你好 我好 --not null
create table commons
(
idnumber(6) primary key,
wordvarchar2(40) not null
);
insert into commonsvalues(seq_wgb_commons.nextval, '你好');
insert into commons values(seq_wgb_commons.nextval,'我好');
insert into commonsvalues(seq_wgb_commons.nextval, '大家好');
insert into commonsvalues(seq_wgb_commons.nextval, '欢迎');
insert into commonsvalues(seq_wgb_commons.nextval, '再见');
insert into commonsvalues(seq_wgb_commons.nextval, '保重');
insert into commonsvalues(seq_wgb_commons.nextval, '注意身体');
--插入数据
--查询:
--某个用户登录后,查看自己的站内信 inbox outbox 内容 表情 常用语
--要求:1.inbox:显示发件人的名字、title、status、content、face、word
--status0 inbox 1 outbox 2 当前这封信被读到 3 当前这封信没被读到 4 被回复 5 没有被回复
selectt3.name as "发件人",mes.title as "信息标题",mes.content as "信息内容" ,t1.face as "表情",t2.word as "常用语",
casemes.status  when 0 then '收件箱'
when 1 then '发件箱'
when 2 then '当前这封信被读到'
when 3 then '当前这封信没被读到'
when 4 then '被回复'
when 5 then '没有被回复'
end"状态"
frommessage mes, member mem,
(
selectid,face
fromfaces
)t1,
(
selectid,word
fromcommons
)t2,
(
selectid, name
frommember
)t3
wheremes.from_member = mem.id
andt3.id = mes.from_member
andmes.face_id = t1.id
andmes.commons_id = t2.id
andmes.status = 0;

--2.outbox:显示收件人的名字、title、status、content、face、word
selectt3.name as "收件人",mes.title as "信息标题",mes.content as "信息内容",t1.face as "表情",t2.word as "常用语",
casemes.status  when 0 then '收件箱'
when 1 then '发件箱'
when 2 then '当前这封信被读到'
when 3 then '当前这封信没被读到'
when 4 then '被回复'
when 5 then '没有被回复'
end"状态"
frommessage mes, member mem,
(
selectid,face
fromfaces
)t1,
(
selectid,word
fromcommons
)t2,
(
selectid, name
frommember
)t3
wheremes.to_member = mem.id
andt3.id = mes.to_member
andmes.face_id = t1.id
andmes.commons_id = t2.id
andmes.status = 1;
create sequence seq_wgb_member;
create sequence seq_wgb_message;
create sequence seq_wgb_faces;
create sequenceseq_wgb_commons;


  其他数据库对象
  

  1.常见数据库对象
  
DSC0000.jpg



  2.什么是序列?
  
  序列:
  自动提供唯一的数值
  共享对象
  主要用于提供主键值
  代替应用代码
  将序列值装入内存可以提高访问效率
  3.CREATE SEQUENCE 语句
  
  定义序列:
  CREATESEQUENCE sequence
   [INCREMENT BY n]
   [START WITH n]
   [{MAXVALUE n | NOMAXVALUE}]
   [{MINVALUE n | NOMINVALUE}]
   [{CYCLE | NOCYCLE}]
   [{CACHE n | NOCACHE}];
  
  4.创建序列
  a)创建序列 DEPT_DEPTID_SEQ为表 DEPARTMENTS 提供主键
  b)不使用 CYCLE 选项
  
  

CREATE SEQUENCEdept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;


  Sequence created.
  

  5.查询序列
  a)查询数据字典视图 USER_SEQUENCES获取序列定义信息
  
  

SELECT sequence_name, min_value, max_value,
increment_by, last_number
FROM    user_sequences;


  b)如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值
  

  6.NEXTVAL 和 CURRVAL 伪列
  a)NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
  b)CURRVAL 中存放序列的当前值
  c)NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
  

  7.序列应用举例
  
  

INSERT INTO departments(department_id,
department_name,location_id)
VALUES      (dept_deptid_seq.NEXTVAL,
'Support', 2500);


  1 row created.
  
  序列 DEPT_DEPTID_SEQ 的当前值
  
  

SELECT dept_deptid_seq.CURRVAL
FROM    dual;


  8.使用序列
  a)将序列值装入内存可提高访问效率
  b)序列在下列情况下出现裂缝:
  i.回滚
  ii.系统异常
  iii.多个表同时使用同一序列
  c)如果不讲序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值
  

  9.修改序列
  
  修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
  

  

ALTER SEQUENCEdept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;


  Sequence altered.
  

  10.修改序列的注意事项
  a)必须是序列的拥有者或对序列有 ALTER 权限
  b)只有将来的序列值会被改变
  c)改变序列的初始值只能通过删除序列之后重建序列的方法实现
  d)其它的一些限制
  

  11.删除序列
  a)使用DROP SEQUENCE 语句删除序列
  b)删除之后,序列不能再次被引用
  
  

DROP SEQUENCEdept_deptid_seq;


  Sequence dropped.
  

  12.索引
  
  索引:
  一种数据库对象
  通过指针加速 Oracle 服务器的查询速度
  通过快速定位数据的方法,减少磁盘 I/O
  索引与表相互独立
  Oracle 服务器自动使用和维护索引
  

  13.创建索引
  a)自动创建: 在定义 PRIMARYKEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引
  b)手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询
  c)在一个或多个列上创建索引
  
  CREATE INDEX index
  ON table(column[, column]...);
  
  d)在表 EMPLOYEES的列 LAST_NAME 上创建索引
  
  

CREATE INDEX emp_last_name_idx
ON               employees(last_name);


  Index created.
  

  14.什么时候创建索引
  
  以下情况可以创建索引:
  列中数据值分布范围很广
  列中包含大量空值
  列经常在 WHERE 子句或连接条件中出现
  表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%
  

  15.什么时候不要创建索引
  
  下列情况不要创建索引:
  表很小
  列不经常作为连接条件或出现在WHERE子句中
  查询的数据大于2%到4%
  表经常更新
  加索引的列包含在表达式中
  

  16.查询索引
  
  可以使用数据字典视图USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息
  
  

SELECT  ic.index_name, ic.column_name,
ic.column_position col_pos,ix.uniqueness
FROM     user_indexes ix, user_ind_columns ic
WHERE   ic.index_name = ix.index_name
AND ic.table_name = 'EMPLOYEES';


  17.基于函数的索引
  a)基于函数的索引是一个基于表达式的索引
  b)索引表达式由列, 常量, SQL 函数和用户自定义的函数
  
  

CREATE INDEXupper_dept_name_idx
ONdepartments(UPPER(department_name));


  
  Index created.
  
  

SELECT *
FROM   departments
WHERE  UPPER(department_name) = 'SALES';


  
  18.删除索引
  a)使用DROP INDEX 命令删除索引
  
  DROP INDEX index;
  
  b)删除索引UPPER_LAST_NAME_IDX
  
  

DROP INDEXupper_last_name_idx;


  Index dropped.
  c)只有索引的拥有者或拥有DROP ANY INDEX权限的用户才可以删除索引
  
  19.同义词
  
  使用同义词访问相同的对象:
  方便访问其它用户的对象
  缩短对象名字的长度
  
  CREATE [PUBLIC] SYNONYM synonym
  FOR object;
  
  20.创建和删除同义词
  a)为视图DEPT_SUM_VU 创建同义词
  
  

CREATESYNONYM  d_sum
FOR  dept_sum_vu;


  Synonym Created.
  b)删除同义词
  
  

DROP SYNONYMd_sum;


  Synonym dropped.
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253478-1-1.html 上篇帖子: Oracle培训(二十八)——Oracle 11g 第四章知识点总结——多表查询 下篇帖子: Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表