CUUG官方博客: CUUG官网_CUUG怎么样_CUUG培训就业怎么样_CUUG学Oracle要多少钱

sql作业 10~13章 兰交大 司金成

约束(定义):表级的强制性规则     数据的完整性

强制性:向表中插入数据的时候,oracle 对数据进行检查,满足条件才能插入。

完整性:比如身份证号码必须唯一,重复的不允许插入

约束种类:主键(primary key),外键(foreign key),非空(not null),唯一(unique),检查(check自定义)

约束有关数据字典  :user_constranints    user_cons_colums 

列级约束:引用单个列,在列的内部定义,可以定义任何类型完整性约束

表级约束:可以引用多个列,与列的定义分开,可以定义除 not null 之外的约束

 注:使用子查询创建表时,列上的 not null(非空)约束也将应用于新表,但 primary key(主键)、

unique(唯一)、foreigne key(外键)约束    以及隐式的 not null(主键列)约束都不会被继承。

表级unique约束  :

例:       create table dept01(deptno number(2),dname varchar2(14),loc varchar2(13),

              constraint uk_dept01_dname unique (dname)); 

主键约束和唯一键约束需要索引,如果不存在,oracle 会自动创建索引。

       select index_name,index_type,table_name from user_indexes;

外键约束定义在子表上,所参考的父表列需要有唯一约束或主键约束。

级联删除(on delete cascade):删除父表时,也将子表一并删除

删除约束:alter table emp02 drop constraint fk_emp02_deptno;

添加约束:alter table emp02 add constraint fk_emp02_deptno foreign key (deptno) 

                  references dept02 (deptno) on delete cascade;

on delete set null :删除父表中的行,子表中引用父表行的外键列为 null

检查约束           

例:  create table dept03(deptno number(2) constraint ck_dept03_deptno 

         check ( deptno between 10 and 99));

删除有约束的列/表时报错,加 cascade constraints 可先把约束删除。

                           例:     alter table dept02 drop column deptno cascade constraint;

使约束失效         例:     alter table dept03 disable constraint ck_dept03_deptno;

 

enable:启用约束(默认)                        disable:禁用约束

validate:表中已有数据验证(默认)               novalidate:表中已有数据不验证

 

视图:(视图是存放在数据字典中的一条子查询。)

or replace :假如视图已经存在,可以覆盖。

Force :即使子查询中明细表不存在,也创建视图。

Noforce :默认值,如果明细表不存在,则引发错误。

with check option :加约束进行检查,对视图进行 dml 操作时,检查创建时的 where条件。

with read only :只能进行查询,不能通过视图修改基表。

例:        create or replace view empvu10  ( employee_number,employee_name,job_title)

               as select empno,ename,job  from emp     where deptno = 10  with read only;

例:       create or replace view salvu30 as select empno employee_number,ename name,sal salary 

               from emp where deptno = 30;

 

序列(sequence):(可产生主键值)  数据字典:user_sequences

例:   create sequence dept_deptno increment by 1 start with 91 maxvalue 100 nocache nocycle;

         (前)select dept_deptno.nextval from dual;  (后)  select dept_deptno.currval from dual;

例:    insert into dept ( deptno,dname,loc) values (dept_deptno.nextval,'MARKETING','BEIJING');

修改序列        例:      alter sequence dept_deptno increment by 1 maxvalue 999999 nocache nocycle;

同义词(synonmy):别名

例:     create public synonym scottemp for emp;

私有同义词只能自己访问,公有同义词任何有权限的用户都可以访问。

公有同义词不是模式对象,不能用模式名做前缀

将emp表查询权限给hr    例:grant select on emp to hr;

 

索引             数据字典:user_indexes    user_ind_columns

注:有主键或唯一键约束是自动创建约束

创建索引            例:         create index emp_ename_idx on emp(ename);

创建基于函数的索引:create index lower_ename_idx on emp(lower(ename));

查看执行计划:

explain plan for select * from emp where ename=upper('scott');

@?/rdbms/admin/utlxplp.sql

开启索引监控:alter index pk_dept monitoring usage;

关闭索引监控:alter index pk_dept nomonitoring usage;

select * from v$object_usage;

 

控制用户访问

创建用户           例:   create user damon identified by damon;

改用户密码        例:   alter user damon identified by oracle;      

解锁用户  例:alter user sh identified by sh account unlock;

oracle 可以用角色来简化权限的管理

查看角色权限                       例 : select * from role_sys_privs where role in ('CONNECT','RESOURCE');

给用户授予权限(角色)      例:grant connect,resource to damon;

授予权限                               例:  grant update (dname,loc) on dept to cuug;

with grant option:这个用户还可以把授权给他的权限给其他用户

数据字典   role_sys_privs  user_sys_privs   user_tab_privs_recd  user_col_privs_recd

 

对象权限:with grant option

对象权限的回收是级联:A 收回 B 的权限,CD 权限也被收回。

回收原则谁授予谁回收:A 不能直接回收 C 的权限。

系统权限:with admin option

系统权限的回收不是级联的:A 收回 B 的权限,CD 权限还在。

回收原则:只要被授权时有 with admin option,就可以回收这个权限

将密码有效期设置为无限制    alter profile default limit password_life_time unlimited;

 

作者:司金成 分类:技术博文 浏览:381 评论:0
留言列表
发表评论
来宾的头像

点击关闭
  • 在线客服