Oracle的数据库对象

七大对象:用户、表、约束、序列、视图、同义词和索引

知识点一:用户  -  User  -  账户、管理员-一切对象的宿主

1、创建用户

????

2、授权

????

授权+创建用户  grant create session to 用户名 identified by 密码

3、锁定账户

????

4、解锁账户

????

5、修改用户

????

6、撤销授权

Revoke 权限 from 用户

Revoke 权限 on 对象 from 用户

7、删除账户

????

补充知识点一:授权任务—连带系统授权

步骤一:创建账户A,连带系统授权

create user rose identified by 123456;

grant create session to rose with admin option;

步骤二:创建账户B

create user lily identified by 123456;

步骤三:连接账户A,授权给账户B

Conn rose/123456@orcl;

grant create session to lily;

步骤四:链接账户B

conn lily/123456@orcl;

疑问:如果我们回收用户A的权限,那么用户B的权限会被收回吗?不会。

补充知识点二:授权任务—连带对象授权

步骤一:创建了用户C,并赋予create session权限

create user nacy identified by 123456;

grant create session to nacy;

步骤二:赋予用户A create table权限,并在开放uesrs表空间权限

grant create session,create table to rose;

alter user rose quota 1m on users;

步骤三:建立一个表,并插入一个数据

conn rose/123456@orcl;

create table a(aid number(2));

insert into a values(1);

步骤四:连接用户A并将对象表a的select权限赋予用户B并且进行连带授权

grant select on a to lily with grant option;

步骤五:连接用户B,并将对象表A.a的select权限赋予用户c

conn lily/123456@orcl;

grant select on rose.a to nacy;

步骤六:连接用户C,对rose.a表进行查询

conn nacy/123456@orcl;

select * from rose.a;

疑问:如果我们回收用户B的select权限(对对象表a),那么用户C的权限会被回收吗?会。

角色:

3种标准角色:select*from dba_sys_privs where grantee ='CONNECT'
  Oracle为了兼容以前的版本,提供了三种标准的角色(role):connect、resource和dba。
  1. connect role(连接角色)

Grant connect to rose;

2. resource role(资源角色)

Grant connect, resource to rose;

3. dba role(数据库管理员角色) 
  dba role拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。systemdba用户拥有。 

注意:撤消一个用户的所有权限,并不意味着从oracle中删除了这个用户,也不会破坏用户创建的任何表;只是简单禁止其对这些表的访问。其他要访问这些表的用户可以象以前那样地访问这些表。

 

创建角色

除了前面讲到的三种系统角色----connect、resource和dba,用户还可以在oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有create role系统权限。

create role命令的实例:

这条命令创建了一个名为student的role:

create role stu;

给student角色授权:

grant create session,create
table,create view,create type to stu;

用student角色给用户授权:

grant stu to rose;

删除角色

drop role stu;

注意:指定的role连同与之相关的权限将从数据库中全部删除。自己验证一下???

知识点二:表–  table  -- 维护使用sql语句完成数据存储

1、创建表class  student

createtableclass(

classid number(3),

classname varchar2(50)

)

createtable student(

stuno number(4),

stuname varchar2(20),

stureg date,

stusex varchar2(10),

classid number(3)

)

2、修改表student添加telephone和address两个字段

--修改表student添加telephone和address两个字段

altertable student add(telephone varchar2(11),address
varchar2(50))

3、修改student表中telephone这个字段number(8)类型

altertable student modify(telephone
number(8))

4、修改student表,删除telephone字段

altertable student drop column telephone

5、设置列不可用

altertable student set unused(address)

6、删除不可用列

altertable student drop unused column

7、修改字段名称

altertable student rename column stuno to sno

8、给表改名字

rename
student to stu

9、删除表

Drop table student

知识点三:约束– constraint –数据完整性和一致性

大体分类:实体完整性  --  减少数据冗余  -- 主键约束(非空,唯一)

域完整性  
--   数据的准确性  -- check约束(default)

引用完整性 
--  数据的一致性  -- 外键约束

Oracle约束对象5大分类:主键(primary key)、非空(not null)、唯一性(unique)、检查(check)、外键(foreign key)

创建约束的两种方式:create table添加约束、alter table 添加约束

select * from
user_constraints;--显示用户拥有的约束的具体内容

select *
from user_cons_columns;显示用户拥有的约束具体约束在了表的哪个列上

--创建表的时候添加行级约束

createtable class1(

classid number(2) primary key,

classname varchar2(20)notnullunique

)

createtable student1(

stuno number(4) primary key,--主键约束

stuname varchar2(20)notnull,--非空约束

stureg datedefaultsysdate,--设定默认值

stusex varchar2(3)default'男'check(stusex in('男','女')),--检查约束

classid number(2) references class1(classid)--外键约束

)

--创建表的过程中添加表级约束

createtable student2(

stuno number(4),

stuname
varchar2(20)notnull,

stureg
datedefaultsysdate,

stusex
varchar2(10)default'男',

classid
number(3),

constraint pk_s2_stuno primary key(stuno),

constraint uq_s2_stuname unique(stuname),

constraint ck_s2_stusex check(stusex
in('男','女')),

constraint fk_s2_classid foreign key(classid)  references class1(classid)

)

not null约束没有表级别约束(default默认值也没有表级约束的添加形式)

--创建完成表格后,添加相应的约束

altertableclass add constraint pk_class_classid primary key(classid);

altertableclass add primary key(classid);

altertableclass modify(classname notnull);

altertablestudent modify(ssexdefault ‘男’);

--删除表中的约束

alter table class1 drop
constraint SYS_C0011073 ;

alter table class1 drop
constraint  pk_class_classid;

altertableclass modify(classname null);

总结:select * from user_constraints;   select * from user_cons_columns;

添加约束【主键、唯一、check、foreign key】

Alter table 表名
add  [constraint 自定义约束名]

primary key()  |

unique()  |

check() |  列名
between 0 and 100  |  列名 in(‘男’,’女’)

foreign key() 
references 主键表名(主键列)

添加约束【非空、缺省】

Altert table 表名
modify (列名非空 | 缺省)

知识点四:序列(sequence)来实现字段的自增长特性

语法:create sequence 序列名

start with 起始值

Increment  by 步长

maxvalue最大值

minvalue最小值

Cycle (nocycle)

Cache 缓存>1的数字

语法:

问题1:建立序列,从1开始每次增加1

create sequence seq_classid

问题2:如何得到序列值?

Selectseq_classid.nextval
from dual;

Select seq_classid.currval
from dual;

问题3:建立序列,从10开始每次增加3个,最大值20,循环?

create sequence seq_test1

startwith10

increment
by3

maxvalue
20

cycle

cache 2

create sequence seq_test2

startwith10

increment
by3

maxvalue
20

minvalue
10

cycle

cache 2

问题4:minvalue 和startwith关系?

  1. Start
    with的值大于或者等于minvalue,如果start with小于minvalue,则数据库报错
  2. 如果序列循环,序列从开始值开始增加,没有设定最小值时,循环一次后从1开始,如果设定了最小值,从最小值开始。

问题5:序列的增长超过了maxvalue的结果?

1.         
如果序列循环,从最小值或者1开始循环。

2.         
如果序列不循环,超过最大值则报错

删除序列:

drop sequence 序列名字;

修改序列?

删除序列重新建立

--利用序列完成class表的classid的数据插入功能

--步骤一:创建表

--步骤二:创建序列

create sequence seq_classid

--步骤三:录入小班、中班、大班

insertintoclassvalues(seq_classid.nextval,'Web')

--删除序列

drop sequence seq_classid;

知识点五:视图view  - 简化查询、提高安全性

语法 : create [or replace] view 视图名

as

复杂的select语句

使用:select * from 视图 where 
group by having order by

注意:有权限才能创建视图grant  create
view  to用户

步骤一:定义视图

--创建视图:查询用户的姓名,所在部门的名称和工资水平

create view vw_eds

as

select emp.ename,dept.dname,salgrade.grade

from emp,dept,salgrade where emp.deptno=dept.deptno

and emp.sal between salgrade.losal and
salgrade.hisal

步骤二:使用视图

select * from vw_eds where
grade > 3;

步骤三:删除视图

Drop view
vw_eds;

知识点六:同义词(synonym)对象table的别名

语法:create synonym 同义词名称for表名

分类:公有-授权用户可以使用,私有-创建用户可以使用

问题1:创建scott用户下的emp表的私有同义词

--emp创建私有同义词

grant create synonym to
scott;

create synonym  syn_emp for emp;

问题2:公有同义词

--emp创建公有同义词

grant create public synonym  to
scott;

create public synonym  synp_emp for emp;

知识点七:索引(index)加快查询速度,择优选择

 在实际工作中,B树索引是Oracle数据库中最常用的一种索引。如在使用Create Index语句创建索引的时候,默认采用的就是B树索引。在B树索引中,是通过在索引中保存排序过的索引列以及其对应的Rowid列的值来实现的。不过对于某些比较特殊的情况,如基数比较小的列,使用这个B树索引反而会降低数据库的查询效率。

语法:createindex索引名on(字段名1[字段名2])

分类:单列索引:一个列

联合索引:两列以上的索引

问题1:在emp表的hiredate上建立索引idx_h

select*from  scott.emp where
hiredate > to_date('1981-01-01','yyyy-mm-dd')

问题2:索引字段中不能使用函数

select*from scott.emp where to_char(hiredate,'yyyy')='1981'—索引失效

select*from emp where hiredate >=to_date('1981-01-01','yyyy-mm-dd')

and hiredate <=to_date('1981-12-31','yyyy-mm-dd')–索引有效

问题3:查询在12000天以前工作的员工

索引不能参与运算

select
* from emp where sysdate -hiredate > 12000;--索引失效

 

select*from emp wheresysdate-12000>
hiredate;--索引有效

2017-10-31 18:34:59

Oracle 笔记(三)的更多相关文章

  1. Oracle笔记 三、function 、select

    Scott表下有这么几个常用的表,而且还带有数据.分别是emp.dept.salgrade: 1.查看表结构用desc desc emp; 2.空表dual,最常用的空表,如: select 2 * ...

  2. oracle 笔记---(三)__体系架构

    查看控制文件位置 SQL> show parameter control_files; NAME TYPE VALUE ------------------------------------ ...

  3. Oracle笔记 目录索引

    Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...

  4. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  5. Oracle笔记(1) 简单查询、限定查询、数据的排序

    Oracle笔记(四) 简单查询.限定查询.数据的排序   一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...

  6. 韩顺平Oracle笔记

    韩顺平Oracle笔记 分类: DataBase2011-09-07 10:24 3009人阅读 评论(0) 收藏 举报 oracle数据库sqljdbcsystemstring   目录(?)[-] ...

  7. Oracle笔记 多表查询

    Oracle笔记  多表查询   本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...

  8. 转:oracle笔记

    oracle笔记1 卸载oracle developer server的方法: 1-1 oracle卸载工具中卸载对应的oracleds项目:在注册表中搜索ORACLEDS HOME对应的别名,删除对 ...

  9. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  10. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

随机推荐

  1. 08Response

    1.功能:设置响应消息 1. 设置响应行 1. 格式:HTTP/1.1 200 ok 2. 设置状态码:setStatus(int sc) 2. 设置响应头:setHeader(String name ...

  2. linux系统很卡的基本排查方法

    1. 查看内存使用情况 free -g 当观察到free栏已为0的时候,表示内存基本被吃完了,那就释放内存吧(释放内存参考上篇文章) 2. 查看磁盘使用情况 df -h 当发现磁盘使用率很高时,那就要 ...

  3. zencart简单设置分类链接不同css样式

    includes/templates/模板/sideboxes/tpl_categories.php $content .= '<a class="'.$new_style.'&quo ...

  4. 第三章 指令-- 30 指令-使用钩子函数的第二个binding参数拿到传递的值

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. keystonejs实战之页头页脚

    前两篇介绍了入门相关知识及对keystonejs整体可用性评估,这篇介绍下开始实际运用中的页头页脚部分,因为马上项目忙了,这个先匆匆的作个收尾. 不管是用WordPress还是其他CMS系统,应用最宽 ...

  6. h5 audio播放问题,audio获取缓存进度条

    <!--全局 audio --> <audio id="audio" @playing="audioReady" @timeupdate=&q ...

  7. grunt-contrib-jshint js代码检查

    grunt-contrib-jshint:用于javascript代码检查(并会给出建议),发布js代码前执行jshint任务, 可以避免出现一些低级语法问题jshint拥有非常丰富的配置,可以自由控 ...

  8. 【leetcode】LCP 2. 分式化简

    题目如下: 有一个同学在学习分式.他需要将一个连分数化成最简分数,你能帮助他吗? 连分数是形如上图的分式.在本题中,所有系数都是大于等于0的整数. 输入的cont代表连分数的系数(cont[0]代表上 ...

  9. css-动画,a标签下,文字加下划线,而且动画是由中间向两边扩展开

    效果: html: <div class="warp"> <a class="welcome">期待您的参与</a> < ...

  10. Release和Debug的区别

    Debug与Release版本的区别 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug ...