oracle基础知识7_oracle常见对象

 

0 常见对象有:

 

对象 描述
基本存储单位
视图 在表基础上抽取出逻辑相关的数据集合
序列 提供有规律的数值
索引 提供高效的查询
同义词 给对象起别名

 

1 表字段类型

 

数据类型 描述
char(size) 定长字符
varchar2(size) 可变长字符
clob 字符数据,最大可4G
BLOB 二进制数据,最大可4G
number(n) 可变长数值类型
long 可变长字符数据,最大可2G
rowid 行地址
bfile 存储外部文件的二进制数据,最大可4G
date 日期
   

 

eg: create table testsavepoint (tid number,tname varchar2(20));

 

 

2 DDL语句:

 

1 参考原来表结构的基础上创建新表,同是将原表部分数据赋值到新表中:

create table emp20
    as
   select * from emp where deptno=20; (创建表的同时将部门号为20的记录赋值到新表emp20中)

 

如果仅仅是创建表,写成如下:

create table emp20
    as
   select * from emp where 1=2;

 

2 修改表: (追加新列 修改列 删除列 重名列)

2.0 create table test1(tid number,tname varchar2(20),hiredate date);

2.1 alter table test1 add image blob;

2.2 alter table test1 modify tname varchar2(40);

2.3 alter table test1 drop column image;

2.4 alter table test1 rename column tname to username;

 

3 删除表:

drop table test1;

 

 

 3 约束(表级别的限制,关键词constraint,可以不加此关键词)

 

约束类型:

a) not null

b) unique

c) primary key

d) foreign key

e) check

 

 检查性约束:

create table test2
   (tid number,
    tname varchar2(20),
    gender varchar2(4) check (gender in ('男','女')),
    sal number check (sal > 0)
   );

 

外键约束几个关键字:

a) foreign key: 在子表中定义了一个表级的约束

b) references: 指定表和父表的列

c) on delete cascade: 当删除父表时,级联删除子表记录

d) on delete set null: 当删除父表时,将子表的相关记录外键值为null

 

eg:  见下面创建表的同时创建约束并给约束赋值,最后一行就是设置外键约束写法


 

 create table myperson
    (pid varchar2(18) constraint myperson_PK primary key,
     pname varchar2(40) constraint myperson_Name_notnull not null,
     gender varchar2(4) constraint myperson_Gender check (gender in ('男','女')),
     email varchar2(40) constraint myperson_Email_unique unique
                        constraint myperson_Email_notnull not null,
     deptno number constraint myperson_FK references dept(deptno) ON DELETE CASCADE
   );  创建表myperson字段deptno ,给这个字段增加外键约束myperson_FK,关联父表dept字段deptno,并当

 删除父表时,级联删除子表myperson记录。

 

 

 

4 视图

 

a) 视图是一张续虚表

b) 建立在已有表的基础上的一种封装查询

c) 仅仅是提供数据展示的一种形式而已,对于开发人员而言,就是带有业务功能的select查询的预定义,终极目的是为了简化查询而生(这个简化是相对于开发人员而言,对于oracle而言是一点简化都没有)

d) 只能创建/删除/替换, 如果修改的话,就相当于替换

e) 非常不建议通过视图对表的数据进行 插入/修改/删除

f)  建议创建视图时候就增加上 read only

 

 创建视图和快捷创建表写法类似,如下

create view empview
    as
    select e.empno,e.ename,e.sal,e.sal*12 annlsal,d.dname
    from emp e,dept d
    where e.deptno=d.deptno with read only;

 

创建好了后,直接执行: select * from empview;  实际上就是让oracle根据视图名称 empview去执行

视图名称对应的 那一大堆select查询,仅仅是让操作人员操作起来少些一些代码而已(类似于一个预定义功能,或者理解为面向对象的封装)

 

 

5 序列:(产生唯一数值的数据库对象,多用于生成主键)

 

 序列就是数组,并被装载在内存中。

两个属性:

a) nextval---> 返回序列中下一个有效的数值,任何用户都可以引用

b) currval---> 存放序列的当前值

序列初始化后,当前值是指向第一个数值之前的那个位置(类似于游标),因此第一个数值

 

创建: create sequence myseq;

得到序列的第一个数值:

 

错误写法:

select myseq.currval from dual
       *

第 1 行出现错误:
ORA-08002: 序列 MYSEQ.CURRVAL 尚未在此会话中定义

 

正确写法:

select myseq.nextval from dual;

NEXTVAL
1

 

 

 

 

 

 

 

 

 

 

使用序列作为主键向表中插入数值:

 create table tableA(tid number,tname varchar2(20));

insert into tableA values(myseq.nextval,'aaa' );

 

 

如果你创建的序列作为所有表的主键来共同使用,那么每个表的主键必定会造成不连续结果,

tableA 1

tableA 2

tableB 3

tableA 4

 

因此在开发中,每个表对应一个此表专有的序列对象。

 

序列修改后,只会影响将来的值,已经被使用的数值不会改变。

alter sequence xxx  increment by xx maxvalue  xxx;

 

删除序列:  drop sequence xxx;

 

 

 

6 索引(和表记录的关系类似于 字典目录和字典里面详细内容)

 


oracle基础知识7_oracle常见对象

 

 如果针对创建索引的列字段经常被更新(eg:sal) 那么不建议创建索引,否则 数据库经常维护这个索引表,效率也不会提高到多少。

 

创建索引:

create index myindex on emp(deptno);

create index myindex on emp(deptno,ename);

 

删除索引:

drop index myindex ;

 

 

 

 

 

 

 

你可能感兴趣的:(oracle基础)