1.上节回想
2.维护数据的完整性
3.管理索引
4.管理权限和角色
1.掌握维护oracle数据完整性的技巧
2.理解索引的概念,会建立索引
3.管理oracle的权限和角色
介绍:维护数据的完整性
数据完整性用于确保数据库数据遵从一定的商业和逻辑guize。
在oracle中,数据完整性能够使用约束。触发器,
应用程序(过程,函数)三种方式来实现。在这三种方法中,由于约束易于维护,
而且具有最好的性能。所以作为维护数据完整性的首选
约束:约束用于确保数据库数据满足特定的商业规则,
在oracle中。约束包含:not null,unique,primary key,
foreign key和check五种
not null(非空)
假设定义了not null。那么当插入数据时,必须为列提供数据
unique(唯一):
当定义了唯一约束后,该列值是不能反复的,但能够为null
primary key:
check:用于强制行数据必须满足一定的规则
商店售货系统表设计案例:
商品表:(goods)
商品号:goodsId
商品名:goodsName
单位价格:unitprice
商品类别:category
供应商:provider
客户表:(customer)
客户号:customerId
姓名:name
住址:address
电子邮件:email
性别:sex
身份证:cardId
购买:(purchase)
客户号:customerId
商品号:goodsId
购买数量:nums
请用sql语言完毕下列功能:
1.建表,在定义中要求声明:
(1)建表
(2)客户的姓名不能为空
(3)单位价格必须大于0。购买数量必须在1到30之间
(4)电子邮件不可以反复
(5)客户的性别必须是男或者女,默觉得男
create table goods(goodId char(8) primary key,
goodsName varchar2(30),
unitprice number(10,2) check(unitprice > 0),
category varchar2(8),
provider varchar2(30)
);
create table customer(customerId char(8) primary key,
name varchar2(50) not null,
address varchar2(50),
email varchar2(50) unique,
sex char(2) default '男' check(sex in ('男','女')),
cardId char(18)
);
create table purchase(customerId char(8) references customer(customerId), //外键
goodsId char(8) references goods(goodsId),
nums numbers(10) check (nums between 1 and 30)
);
商店售货系统表设计案例(2)
假设在建表时忘记建立必要的约束,则能够在建表后使用 alter table进行改动,
alter table goods modify goodsName not null;
alter table customer add constraint cardunique unique(cardId);//改动一个表,添加唯一性约束。并位唯一性取名字cardunique
alter table customer add constraint addresscheck check (address in ('东城','西城'))。
删除约束:
alter table 表名 drop constraint 约束名称;
显示约束信息:
1.显示约束信息:
通过查询数据字典视图user_constraints,能够显示当前用户全部
的约束的信息
select constraint_name,constraint_type,status,validated from
user_constraints where table_name='表名';
2.显示约束列
通过查询数据字典视图user_cons_columns,能够显示约束所
相应的表列信息
select column_name,position from user_cons_columns where constraint_name='约束名';
3.当然也有更easy的方法。直接用PL/SQL developer查看就可以
维护数据完整性 -表级定义和列级定义
列级定义:
列级定义是在定义列的同一时候定义约束:
create table department4
(
dept_id number(2) constraint pk_department primary key,
name varchar2(12),
ioc varchar2(12)
);
表级定义:
表级定义是在定义了全部列后。再定义约束,这里须要注意:
not null 约束仅仅能在列级上定义
create table employee2
(
emp_id number(4),name varchar2 (15),dept_id number(2),
constraint pk_employee primary key (emp_id),
constraint fk_department foreign key (dept_id) references department4(dept_id)
);
管理索引:原理介绍
索引是用于加速数据存储的数据对象。合理的使用索引能够大大
减少i/o次数。从而提高数据訪问性能,索引有非常多种
为什么加入索引后,会加快查询速度呢?
视图是为了将数据进行分类,归档,然后得到数据的索引,通过
索引就可找到数据了
索引提高了数据的查找速度。可是索引并非建的越多越好
索引分类:
单列索引:基于单个列所建的索引
create index nameIndex on customer(name);
复合索引:基于两列或是多个列的索引,在同一张表上能够有多个索引,可是要求
列的组合必须不同,比方:
create index emp_index1 on emp(ename,job);
和
create index emp_index1 on emp(job,ename);
是两个不同的索引
sql语句的运行时从右到左的进行扫描的
使用原则:
(1)在大表上建立索引
(2)在where子句或是连接条件上常常引用的列上建立索引
(3)索引的层次不要超过4层
索引的缺点:
1.建立索引。系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引
2.更改数据的时候,系统必需要有额外的时间来同一时候对索引进行更新。以维持数据和索引的一致性
依照数据存储方式,能够分为B*树。通过查询数据字典视图dba_indexs和
user_indexa,能够显示索引的信息
管理权限和角色
oracle中的权限:
(1)系统权限:oracle提供了140多种系统权限
什么是系统权限?
操作数据库系统的权限
系统权限有哪些?
怎样赋予系统权限?
授予系统权限通常是dba来完毕的
create user ken identified by m123;
create user tom identified by m123;
conn system/manager as sysydba;
grant create session,create table to ken with admin option;(权限能够转移授权)
grant create view to ken;(权限仅仅能自己有,不能授予其它人)
回收系统权限:使用revoke
revoke create session from ken;
注意:系统权限不是级联回收的
create是系统权限
(2)对象权限:
什么是系统权限?
操作数据库数据对象的权限
系统权限有哪些?
怎样赋予系统权限?
方案:当创建一个用户以后,数据库就会为该用户分配一个方案,方案名称和
username称是一致的,方案中包含各种各样的数据对象。表,视图,索引。触发器
角色:oracle提供了大概25总角色,每种角色包括了一大批权限
常见对象权限:
alter delete select insert
update index references execute
dba_tab_privs;//显示对象权限
授予对象权限:
create user monkey identified by m123;
grant create session to monkey;
grant select on emp to monkey;
grant update on emp to monkey;
grant select on emp to monkey;
或者
grant all on emp to monkey;
grant update on emp(sal) to monkey; //monkey用户仅仅能够改动scott用户的emp表的sal字段
grant update on emp(ename,sal) to monkey;
grant index on scott.emp to blake with grant option;
使用with grant option选项
该选项用于转授对象权限,可是该选项仅仅能被授予用户,而不能授予角色
权限能够授予用户,也能够授予角色
回收对象的权限:对象权限的回收是级联回收的,而对象权限是不进行级联回收的
系统权限转移派发使用 with admin option
对象权限转移派发使用 with grant option
conn scott/m123;
oracle有两大权限。系统权限和对象权限
角色就是相关权限命令的集合,使用角色的目的就是为了简化权限的管理
角色分为提前定义角色和自己定义角色。提前定义角色有25种,
经常使用的三种提前定义角色
(1)connect角色
含有8种角色
alter session
create cluster
create database link
create session
create table
create view
create sequence
(2)resource角色
注意:resource角色隐含比如unlimited tablespace系统权限
create cluster
create indextype
create table
create sequence
create type
create procedure
create trigger
(3)dba角色
基本上拥有全部系统权限。及with admin option
没有启动和关闭数据库的权限
自己定义角色
1)建立角色
(1)建立角色(不验证)
启动数据库服务。启动监听以后,才干够建立数据库连接
假设角色是公有角色,没有设置password
create role myrole1 not identified;
(2)建立角色(数据库验证)
建立角色设置password
create role 角色名 identified by ***;
角色授权
当建立角色后。角色时没有不论什么权限的。须要对其进行授权才干够的
grant create session to 角色名 with admin option;
grant select on emp to 角色名;
grant update on emp to 角色名。
grant delete on emp to 角色名;
1)分配角色
怎样分配自己定义角色???
create user along identified by m123;
grant myrole1 to along;
2)删除角色
删除角色,要使用数据库系统角色来删除的
conn system/manager
drop role 角色名;
注意:假设角色被删除,则用户将没有该相应的角色
1.显示全部角色
select * from dba_roles;
2.显示角色具有的系统权限
3.显示角色具有的对象权限
4.显示用户具有的角色,及默认角色
select granted_role,default_role from dba_role_privs where
grantee='scott';
精细訪问控制:
是指用户能够使用函数,策略实现更加细微的安全訪问控制