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';

精细訪问控制:

 是指用户能够使用函数,策略实现更加细微的安全訪问控制

玩转oracle学习第五天的更多相关文章

  1. 玩转oracle学习第七天

     1.上节回想 2.PL/SQL的进阶 3.oracle的视图 4.oracle的触发器 目标: 1.掌握PL/SQL的高级使用方法(能编写分页过程模块,下订单过程模块.. . ) 2.会处理or ...

  2. Oracle学习(五)DBLINK

    一.DBLINK学习 目的:为了解决跨库访问的需求. 场景如下:tnsnames.ora(oracle的库配置文件)下配置了2个库的环境地址,现在要实现跨库访问. PS:DBLINK和是否同一个主机无 ...

  3. Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页

    GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group ...

  4. Oracle学习笔记(五)

    七.查询 1.基本查询语句 select 列名字,列名字 from 表名字 例如 select user_a_id from userinfo; 2.在SQL*PLUS中设置格式 (1)设置新的字段名 ...

  5. 玩转oracle学习第六天

     1.上节回想 2.PL/SQL的介绍 3.PL/SQL的基础 理解oracle的pl/sql概念 掌握PL/SQL编程技术(包含编写过程,函数,触发器.包... ) PL/SQL是什么? PL/ ...

  6. oracle学习篇五:组函数,分组统计

    常用组函数: 1.ccount() 求出全部记录数. 2.max() 求出一组最大值 3.min() 求出一组最小值 4.avg() 求出平均值 5.sum() 求和 --1.统计员工数量: sele ...

  7. oracle 学习(五)pl/sql语言存储过程&包

    首先搞清楚俩概念 存储过程(procedure)&程序包(package) 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它.触发器是与表直接关联的特殊存储 ...

  8. Oracle学习系列1-7

    Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...

  9. Oracle学习系列6

    Oracle学习系列6 ************************************************************************************ 删除约 ...

随机推荐

  1. python—第三库的安装方法

    Windows系统下安装第三方Python库的三种方法: 1.使用easy_install命令安装 一般在安装完Python后再C:\Python27\Scripts 目录下有 easy_instal ...

  2. phpunit Cannot redeclare class PHPUnit_Runner_Version

  3. Android 5.0 源代码结构

    本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/artic ...

  4. Android中播放本地SD卡中歌曲须要的加入的权限

    使用MediaPlayer播放本地Mp3文件时.须要注意的訪问路径的问题以及訪问权限的问题. 1.訪问路径:/storage/emulated/0 此路径即为手机的根路径,能够通过下载ES文件浏览器软 ...

  5. 改变 Windows 用户文件夹默认位置

    https://social.microsoft.com/Forums/zh-CN/b6602d50-1a75-42d2-90bd-3dc6c2c82147/programdata?forum=win ...

  6. Image.Save()发生“GDI+ 中发生一般性错误”

    从数据库中读取的图片是byte[]类型,将其转换成Image可以正常显示,但是调用image.Save()时会发生“GDI+ 中发生一般性错误”.public static System.Drawin ...

  7. MySQL优化器的成本模型

    http://www.orczhou.com/index.php/2016/08/mysql-optimizer-cost-model-1/V

  8. 通过扩展jQuery UI Widget Factory实现手动调整Accordion高度

    □ 实现Accordion高度一致 <head> <meta name="viewport" content="width=device-width&q ...

  9. 使用 DES 算法对数据加密

    DES算法 ☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改 ☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握 ☆DES密码体制的安全性应该不依赖于算法的保 ...

  10. 使用 NSPropertyListSerialization 持久化字典与数组

    NSPropertyListSerialization The NSPropertyListSerialization class provides methods that convert prop ...