oracle学习之表管理,约束以及视图索引同义词的操作
在oracle中,常见的数据库对象有:
表,视图,索引,序列,同义词
存储过程,存储函数,触发器,包,包体,数据库链路(datalink),快照
表是数据库的基本存储单元,以行列组成,命名规则:
1,必须以字母开头
2,长度在1~30之间
3,oracle默认存储都存为大写
创建表必须具备:权限 和 表空间
常见的数据类型如下:
//创建表语法: create table tablename(col1 type,col2 type,col3 type …);
例子:
create table t1(id number(2),tname varchar2(30),hiredate date default sysdate);
增加一列:
alter table t1 add email varchar2(40);
修改列属性:
alter table t1 modify email varchar2(50);
修改列名:
alter table t1 rename column email to address;
删除列名:
alter table t1 drop column address;
重命名表:
rename t1 to t2;
删除表:
drop table t2;
这里要注意,删除后,还会存在回收站中,可以使用下面的语句查看:
show recyclebin;
如果想恢复,可以使用下面语句闪回:
flashback table t2 to before drop;
当然了,也可以直接清空回收站:
purge recyclebin;
如果想在删除时,直接不进入回收站,可以使用:
drop table t2 purge;
表的约束,类型主要有:
1,非空 not null
2,唯一 unique
3,检查 check
4,主键 非空 + 唯一 primary key
5,外键 引用其它表的主键字段
当主表数据删除时,子表可以 set null , on delete set null
当主表数据删除时,子表的数据级联删除 ON DELETE CASCADE
默认方式,当子表有数据的时候,不让删除主表,而是先删除子表数据,在删除主表
表的约束创建,使用 constraint 给约束起别名,references 引用:
create table emp2(sid number(4) constraint PK_EMP2 primary key, sname varchar2(30) not null, email varchar2(30) unique, sex varchar2(10) check (sex in('男','女')), sal number(10) check(sal > 10000), deptno number(2) references dept(deptno) on delete set null );
表的序列化
当多个人同时操作主键字段,如何保证不会重复,这就需要用到序列,给主键字段使用。
创建序列:
create sequence myseq;
这里要注意,同一行,只会增加一次序列
什么情况下会导致主键不连续:
1,删除数据
2,多个表使用同一个序列
3,执行rollback,序列在实例中,不会回滚
4,掉线,宕机,重启直接加载下一段
删除序列:
drop sequence myseq;
常见数据库对象:视图
它是从表中抽出的逻辑上相关的数据集合,特性:
1,视图基于表
2,视图是逻辑概念
3,视图本身没有数据
视图的优点如下:
1,简化复杂查询
2,隔离数据访问,不建议通过视图对表进行修改
创建视图:
create or replace view vdeptcount as select d.deptno,d.dname,count(e.empno) count from dept d,emp e where d.deptno = e.deptno(+) group by d.deptno,d.dname order by d.deptno;
简化后可以使用如下语句查看:
select * from vdeptcount;
默认情况下会提示没有权限创建视图,需要登录管理员增加权限:
sqlplus sys/sys@orcl100 as sysdba; grant create view to scott;
使用视图需要注意三点:
1,视图不能提高查询效率
2,视图本身没有数据,数据依赖于表
3,不建议通过视图对原表进行操作
同义词,作用如下:
1,简化复杂查询
2,隔离数据方问
创建同义词同样也需要权限:
grant create synonym to scott;
开始创建:
create synonym employees for hr.employees;
删除同义词:
drop synonym employees;
索引,提市内数据检索速度,提高效率(视图不可以)
1,索引被删除或者损坏,不会对表产生影响,只会影响查询速度
2,索引一旦建立,由oracle自动维护
3,在删除表时,会自动删除
创建索引仍然需要权限 + 表空间
create index myindex on emp(ename);
建立好后,索引的字段ename必须作为查询字段,要不也没有意义。
还可以创建联合索引:
create index myindex on emp(ename,deptno);
什么情况可以创建索引:
1,列中数据值分布范围很广
2,列经常在 where 子句 或者连接条件中出现
3,表经常被访问且数据量很大,访问的数据大概占数据总量的2%~4%