Oracle 笔记(三)
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拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有。
注意:撤消一个用户的所有权限,并不意味着从oracle中删除了这个用户,也不会破坏用户创建的任何表;只是简单禁止其对这些表的访问。其他要访问这些表的用户可以象以前那样地访问这些表。
创建角色
除了前面讲到的三种系统角色----connect、resource和dba,用户还可以在oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有create role系统权限。
create role命令的实例:
这条命令创建了一个名为student的role:
create role stu; |
给student角色授权:
grant create session,create |
用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 |
3、修改student表中telephone这个字段number(8)类型 |
altertable student modify(telephone |
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 |
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 stureg stusex classid constraint pk_s2_stuno primary key(stuno), constraint uq_s2_stuname unique(stuname), constraint ck_s2_stusex check(stusex constraint fk_s2_classid foreign key(classid) references class1(classid) ) l 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 alter table class1 drop 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 Select seq_classid.currval |
问题3:建立序列,从10开始每次增加3个,最大值20,循环? |
create sequence seq_test1 startwith10 increment maxvalue cycle cache 2 create sequence seq_test2 startwith10 increment maxvalue minvalue cycle cache 2 |
问题4:minvalue 和startwith关系? |
|
问题5:序列的增长超过了maxvalue的结果? |
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 |
步骤二:使用视图 select * from vw_eds where |
步骤三:删除视图 Drop view |
知识点六:同义词(synonym)对象table的别名
语法:create synonym 同义词名称for表名
分类:公有-授权用户可以使用,私有-创建用户可以使用
问题1:创建scott用户下的emp表的私有同义词 |
--为emp创建私有同义词 grant create synonym to create synonym syn_emp for emp; |
问题2:公有同义词 |
--为emp创建公有同义词 grant create public synonym to 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 |
问题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
select*from emp wheresysdate-12000> |
2017-10-31 18:34:59
Oracle 笔记(三)的更多相关文章
- Oracle笔记 三、function 、select
Scott表下有这么几个常用的表,而且还带有数据.分别是emp.dept.salgrade: 1.查看表结构用desc desc emp; 2.空表dual,最常用的空表,如: select 2 * ...
- oracle 笔记---(三)__体系架构
查看控制文件位置 SQL> show parameter control_files; NAME TYPE VALUE ------------------------------------ ...
- Oracle笔记 目录索引
Oracle笔记 一.oracle的安装.sqlplus的使用 Oracle笔记 二.常用dba命令行 Oracle笔记 三.function .select Oracle笔记 四.增删改.事务 Or ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- Oracle笔记(1) 简单查询、限定查询、数据的排序
Oracle笔记(四) 简单查询.限定查询.数据的排序 一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及 ...
- 韩顺平Oracle笔记
韩顺平Oracle笔记 分类: DataBase2011-09-07 10:24 3009人阅读 评论(0) 收藏 举报 oracle数据库sqljdbcsystemstring 目录(?)[-] ...
- Oracle笔记 多表查询
Oracle笔记 多表查询 本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查 ...
- 转:oracle笔记
oracle笔记1 卸载oracle developer server的方法: 1-1 oracle卸载工具中卸载对应的oracleds项目:在注册表中搜索ORACLEDS HOME对应的别名,删除对 ...
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- Mastering Web Application Development with AngularJS 读书笔记(三)
第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...
随机推荐
- 08Response
1.功能:设置响应消息 1. 设置响应行 1. 格式:HTTP/1.1 200 ok 2. 设置状态码:setStatus(int sc) 2. 设置响应头:setHeader(String name ...
- linux系统很卡的基本排查方法
1. 查看内存使用情况 free -g 当观察到free栏已为0的时候,表示内存基本被吃完了,那就释放内存吧(释放内存参考上篇文章) 2. 查看磁盘使用情况 df -h 当发现磁盘使用率很高时,那就要 ...
- zencart简单设置分类链接不同css样式
includes/templates/模板/sideboxes/tpl_categories.php $content .= '<a class="'.$new_style.'&quo ...
- 第三章 指令-- 30 指令-使用钩子函数的第二个binding参数拿到传递的值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- keystonejs实战之页头页脚
前两篇介绍了入门相关知识及对keystonejs整体可用性评估,这篇介绍下开始实际运用中的页头页脚部分,因为马上项目忙了,这个先匆匆的作个收尾. 不管是用WordPress还是其他CMS系统,应用最宽 ...
- h5 audio播放问题,audio获取缓存进度条
<!--全局 audio --> <audio id="audio" @playing="audioReady" @timeupdate=&q ...
- grunt-contrib-jshint js代码检查
grunt-contrib-jshint:用于javascript代码检查(并会给出建议),发布js代码前执行jshint任务, 可以避免出现一些低级语法问题jshint拥有非常丰富的配置,可以自由控 ...
- 【leetcode】LCP 2. 分式化简
题目如下: 有一个同学在学习分式.他需要将一个连分数化成最简分数,你能帮助他吗? 连分数是形如上图的分式.在本题中,所有系数都是大于等于0的整数. 输入的cont代表连分数的系数(cont[0]代表上 ...
- css-动画,a标签下,文字加下划线,而且动画是由中间向两边扩展开
效果: html: <div class="warp"> <a class="welcome">期待您的参与</a> < ...
- Release和Debug的区别
Debug与Release版本的区别 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug ...