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. mysql向表中某字段前后追加一段字符串 concat(), trim(), ltrim(), rtrim(), repeat()

    1.mysql向表中某字段后面追加一段字符串:update table_name set field=CONCAT(field, '分隔符', str);//'分隔符',可以为空,也可以省略updat ...

  2. js最简单焦点图片轮播代码

    将下面代码保存为banner.js,在需要显示焦点图的地方调用该js即可. <script type="text/javascript" src="banner.j ...

  3. 页面内置函数${fn:}

    引入头文件<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions " %&g ...

  4. nginx反向代理原理及配置详解

    nginx概述nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外n ...

  5. k8spod探测

    一.pod存活性探测 pod spec为容器列表中的相应容器定义其专用的探针即可启用存活性探测,目前,k8s的容器支持存活性探测的方法包含:ExecAction.TCPSocketActon和HTTP ...

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

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

  7. web前端_css02

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  9. extern、static

    1. 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说exter ...

  10. TTTTTTTTTT TTTTT CF 229C 三角形数量

    题意: 有一个无向完全图(任意两个节点之间均有一条边),包含 n(1<=n<=10^6) 个顶点,现在有两个人A 和 B,A从这个无向图中取出 m(0<=m<=10^6) 条边 ...