玩转oracle学习第五天
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学习第五天的更多相关文章
- 玩转oracle学习第七天
1.上节回想 2.PL/SQL的进阶 3.oracle的视图 4.oracle的触发器 目标: 1.掌握PL/SQL的高级使用方法(能编写分页过程模块,下订单过程模块.. . ) 2.会处理or ...
- Oracle学习(五)DBLINK
一.DBLINK学习 目的:为了解决跨库访问的需求. 场景如下:tnsnames.ora(oracle的库配置文件)下配置了2个库的环境地址,现在要实现跨库访问. PS:DBLINK和是否同一个主机无 ...
- Oracle学习笔记五 SQL命令(三):Group by、排序、连接查询、子查询、分页
GROUP BY和HAVING子句 GROUP BY子句 用于将信息划分为更小的组每一组行返回针对该组的单个结果 --统计每个部门的人数: Select count(*) from emp group ...
- Oracle学习笔记(五)
七.查询 1.基本查询语句 select 列名字,列名字 from 表名字 例如 select user_a_id from userinfo; 2.在SQL*PLUS中设置格式 (1)设置新的字段名 ...
- 玩转oracle学习第六天
1.上节回想 2.PL/SQL的介绍 3.PL/SQL的基础 理解oracle的pl/sql概念 掌握PL/SQL编程技术(包含编写过程,函数,触发器.包... ) PL/SQL是什么? PL/ ...
- oracle学习篇五:组函数,分组统计
常用组函数: 1.ccount() 求出全部记录数. 2.max() 求出一组最大值 3.min() 求出一组最小值 4.avg() 求出平均值 5.sum() 求和 --1.统计员工数量: sele ...
- oracle 学习(五)pl/sql语言存储过程&包
首先搞清楚俩概念 存储过程(procedure)&程序包(package) 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它.触发器是与表直接关联的特殊存储 ...
- Oracle学习系列1-7
Oracle学习系列1 两个服务必须启动: OracleOraDb10g*TNListener 和 OracleService*** 使用sqlplusw先进行环境的设置 set linesize 3 ...
- Oracle学习系列6
Oracle学习系列6 ************************************************************************************ 删除约 ...
随机推荐
- 去除ArcMap连接空间数据库中多余的属性表
这个操作目前可能不具有可行性,但是为了完整性还是在下面讲一下吧.如有兴趣的小伙伴,可以按照下面的操作方式去尝试. 一.需求 去除ArcMap连接空间数据库中多余的属性表. PL/SQL中查询得到的内容 ...
- java获取路径(转)
1.利用System.getProperty()函数获取当前路径:System.out.println(System.getProperty("user.dir"));//user ...
- python的内存回收机制即gc模块讲解
最后容易造成内存问题的通常就是全局单例.全局缓存.长期存活的对象 引用计数(主要), 标记清除, 分代收集(辅助) 引用计数为0则会被gc回收.标记删除可以解决循环引用的问题.分代:0代--年轻代:1 ...
- 【BZOJ】【2694】Lcm
数论/莫比乌斯反演/线性筛 题解:http://www.cnblogs.com/zyfzyf/p/4218176.html JZPTAB的加强版?感觉线性筛好像还是不怎么会啊……sad 题目记下来,回 ...
- OpenCV学习(31) 基于defects的简单手势
前几年在做毕业设计时候曾用opencv1.0中defects做过简单的手势识别,这几天看OpenCV2.46中的轮廓函数,发现和以前差别挺大,函数调用完全不一样,重新实现了简单手势的代码. 1.首先用 ...
- [13] 弧面(Arc)图形的生成算法
顶点数据的生成 bool YfBuildArcVertices ( Yreal radius, Yreal degree, Yreal height, Yuint slices, Yuint stac ...
- iOS开发-JSON解析
JSON(JavaScript Object Notation)在网络传输中几乎无处不在,JSON是一种轻量级的数据交换格式,是基于JavaScript(Standard ECMA-262 3rd E ...
- DialogPlus
项目地址:https://github.com/orhanobut/dialogplus Demo地址:https://github.com/baiqiantao/DialogPlusTest co ...
- JS中应用正则表达式转换大小写
JS中应用正则表达式转换大小写,代码很简单,看代码: 以下首字母大写,其它字母小写 <script type="text/javascript"> function r ...
- JS 中数组字符串索引和数值索引研究
先来看一个问题: var array = []; array["a"] = "hello"; array["b"] = "worl ...