热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

三、常见的数据库对象

1、常见的数据库对象表基本的数据存储集合,由行和列组成。视图从表中抽出的逻辑上相关的数据集合。序列提供有规律的数值。索引提高查询的效率同义词给对

1、常见的数据库对象

表    基本的数据存储集合,由行和列组成。

视图   从表中抽出的逻辑上相关的数据集合。

序列   提供有规律的数值。

索引   提高查询的效率  

同义词   给对象起别名

详解

    序列: 可供多个用户用来产生唯一数值的数据库对象,自动提供唯一的数值共享对象,主要用于提供主键值

将序列值装入内存可以提高访问效率。

2、序列:

定义序列的语法:

Create sequence 序列名

    Increment by 数字  --每次增长的数值

    Start with  数字   --从那个值开始

    Maxvalue  数字|nomaxvalue

    Minvalue  数字|nominvalue

    Cycle|nocycle      --是否需要循环

    Cache 数字|nocache --是否产生序列号预分配,并存储在内存中

    Order |noorder     --可保证生成的序列值是按照序列产生的

|实例1|

步骤1:

创建序列:student_xuehao_seq

create sequence student_xuehao_seq

       increment by 1

       start with 1

       maxvalue 9999

       nocache

       nocycle;

备注:在使用序列时,需要用到序列的两个伪序列:NEXTVAL与CURRVAL

NEXTVAL:返回序列生成的下一个序列号值

CURRVAL:返回序列的当前序列号值

 

步骤2:

insert into t_emp(employee_id,name,sal)

values(student_xuehao_seq.nextval,'马达',30000);

select * from t_emp where name='马达';--此时马达的employee_id是1

备注:实际中在为表生成主键时,通常是为表创建一个行级触发器,然后再触发器主体中使用序列值替换用户提供的值。

|实例2|

管理序列:使用alter sequence对序列进行修改,除序列的起始值不能被修改外,其他的都进行修改。如要修改序列的起始值需要先删除序列,然后重建该序列。

--修改序列

alter sequence student_xuehao_seq

  increment by 17;

insert into t_emp(employee_id,name,sal)

values(student_xuehao_seq.nextval,'马达',30000);

select * from t_emp where name='马达';--此时马达的employee_id是18

--查询序列

desc user_sequences;-- user_sequences为数据字典的名字

--删除序列

Drop sequence student_xuehao_seq;

备注:

oracle中可以用create or replace的对象有:functions, procedures, packages, types, synonyms, trigger and views,就是没有table,也没有sequence。所以这里会提示选项缺失或无效。如果表不存在则直接去掉or replace进行表的创建,如果表已经存在,则先删除后再进行创建。

 

3、索引

1)索引的理解:

一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中,索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度。索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引。用户不用在查询语句中指定使用哪个索引。在删除一个表时,所有基于该表的索引会自动被删除。通过指针加速 Oracle 服务器的查询速度。通过快速定位数据的方法,减少磁盘 I/O。

查询时,没有索引情况下,必须遍历整个表,然后将读取的每条记录与查询条件进行对比,最后返回满足条的记录,如果查询条件中有索引取值条件,就可以通过保存在索引中的rowid快速找到表中对应的记录。

2)索引建立的原则:

         a、在大表上建立索引

b、在where字句或是连接条件上经常引用的列上建立索引

c、索引的层次不需要超过4层  

3)索引的缺点:

a、建立索引,系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引;

b、更新数据的时候:系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性

不恰当的索引不但于事无补,反而会降低系统性能,因为大量的索引在进行插入、修改和删除操作时,

比没有索引花费更多的系统时间;

 

|实例1|

创建索引:

自动创建: 在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引

手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询

 

--创建单例索引:是基于单个列所建立的索引,

create index 索引名 on 表明(列名字)

create index goodsIndex on goods(GOODSID);

create index emp_id_index on t_emp(employee_id);

建索引以后相当于它会自动的将这张表按照该索引所在的列名进行排序;

 

--创建复合索引:复合索引是基于两列或是多列的索引,在同一张表上可以有多个索引但是要求列的组合必须不同

create index emp_indx1 on emp (ename,job);

 

--查看索引:
select index_name,table_name,table_owner,tablespace_name from user_indexes where table_name='T_EMP';

Dba_indexes:可显示数据库的所有索引

All_indexes:可以显示当前用户可以访问的所有索引

User_indexes:可以显示当前用户的索引信息

 

--删除索引

drop index EMP_ID_INDEX;

--如何显示系统权限:

select * form system_privilege_map order by name;

4、同义词-synonym

同义词是表、索引、视图等模式对象的一个别名。与视图、序列一样,同义词只在oracle数据字典中保存其定义描述,因此同义词也不占用任何的存储空间。

--创建私有同义词:需要具有create synonym 的权限

 create synonym private_t_emp for t_emp;

--使用同义词进行表的访问:

select * from private_t_emp;

--删除私有同义词:

drop synonym private_t_emp;

--创建公有同义词:

create public synonym public_t_dept for zhangjunbo.t_emp;

--使用同义词进行表的访问:

select * from public_t_dept;

--删除公有同义词:

drop public synonym public_t_dept;

5、  视图

1)视图概念:视图是一个虚拟表,它由存储的查询构成,可以将它的输出看做一个表。视图同真实表一样,也可以包含一系列带有名称的列和行数据。但是视图并不在数据库中存储数据值,其数据值来自定义视图的查询语句所引用的表,数据库只在数据字典中存储视图的定义信息。

视图也可以进行insert、update、delete 操作,通过视图修改数据时,实际上就是修改基本表中的数据,与之相对应,改变表中的数据也会反应到由该表组成的视图中。

2)创建视图的语法:

create [or replace] view <视图名字> [视图列明的别名,视图的列明的别名,...]

as                                                                          --subquery用于指定视图对应的子查询语句

[with check option] [constraint constraint_name]    --with check option用于指定在视图上定义的check约束

with read only                                                                             --定义只读视图

 

|实例1|

1)简单视图:指基于单表建立的,不包含任何的函数、表达式和分组数据的视图。

--授权

grant create view to zhangjunbo;

--创建视图

create or replace view t_emp_view as

select * from t_emp where sal>9000;

创建视图时,只是将视图的定义信息存入到数据字典,并不会执行其中的select语句,在对视图进行查询时,系统才会根据视图的定义才会从基本表中获取数据。

--查看视图

select * from t_emp_view;

备注:由于在创建视图的时候没有给t_emp_view视图指定别名,所以视图的列明分别为t_emp表中列的名字

--给视图添加数据:

insert into t_emp_view

values(21,'慢慢','12232');

2)复杂视图:指包含函数、表达式或分组数据的视图。创建复杂视图主要是为了简化查询操作。

注意:当视图子查询包含函数或者表达式时,必须为其定义列别名。

--创建复杂视图

create or replace view student_view_complex as

select classid 班级,max(sal) 最高工资,avg(sal) 平均工资

from student

group by classid

--查看复杂视图:

Select * from student_view_complex;

--创建连接视图

准备工作

create  table student_info(stu_no,stu_name,stu_sal) as select xuehao,xingming,sal from student;

 

select st.xuehao,si.stu_name,si.stu_sal from student st,student_info si where st.xuehao=si.stu_no;

创建视图

create or replace view student_info_union as

select st.xuehao,si.stu_name,si.stu_sal from student st,student_info si where st.xuehao=si.stu_no;

查看视图

select * from student_info_union;

3)管理视图:查看视图、修改视图、重新编译视图和删除视图

--查看视图定义的信息:

select text,uv.* from user_views uv where view_name=upper('student_info_union');

--修改视图:

create or replace view student_info_union as

select st.xuehao,si.stu_name,si.stu_sal from student st,student_info si where st.xuehao=si.stu_no;

--重新编译视图:

alter view student_info_union compile;

--删除视图:

drop view student_info_union;

 

6、表

- - 查看用户定义的表:

select ut.table_name,ut.tablespace_name from user_tables ut;

 

--查看用户定义的各类数据库对象:

select distinct object_type from user_objects;

select object_name, object_type from user_objects;

--查看用户定义的表, 视图, 同义词和序列:

select * from user_catalog;

--查看表结构:

desc student;

 

--删除表

drop table student

方法一:drop table student;

表的结构和数据都被删除,所有相关索引被删除,所有正在运行的相关事务被提交;

drop table 语句不能被回滚

 

方法二:truncate table student

删除表中的所有记录,表结构还在,不写日志,释放表的存储空间,无法找回删除的记录,速度快;

Truncate table不能回滚

 

--给表中添加字段:

alter table student add (classId number(2));

alter table student add (fenshu number(10));

 

--修改字段的长度:

alter table 表明 modify (fenshu varchar2(30));

 

--修改字段的类型/或是名字(不能有数据)

alter table student modify (fenshu char(30));

 

--删除一个字段:

alter table student drop column address;;

 

--修改表的名字:

rename student to stu;

 

--向表中添加数据:

insert into student values ('A001','张三','男','01-5月-05',10);

 

--把查询的结果一次性插入到另外一个表中

insert into t_emp   select xuehao,xingming,sal from student;

 

--改日期的默认格式:

alter session set nls_date_format ='yyyy-mm-dd';

oracle 中默认的日期格式'DD-MON-YY' dd日子(天),mon 月份,yy 2位的年'09-6月-99'表示1999年6月9号

修改后,可以用我们熟悉的格式添加日期类型;

insert into  student values ('A002','MIKE','男','1905-05-06',10);

 

--设置保存点:

savepoint drop_student;

delete from student;

rollback to drop_student;

备注:

1)设置保存点后,不能进行提交否则当你回滚的时候提示:"从未创建保存点 'drop_student'"

2)CREATE TABLE 创建表

ALTER TABLE 修改表结构

DROP TABLE 删除表    

RENAME  TO   重命名表

TRUNCATE TABLE 删除表中的所有数据,并释放存储空间

注意:以上这些DDL的命令,就算设置了保存点,操作后,皆不可回滚!


推荐阅读
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
author-avatar
我是你的特效
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有