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 ...
随机推荐
- mysql向表中某字段前后追加一段字符串 concat(), trim(), ltrim(), rtrim(), repeat()
1.mysql向表中某字段后面追加一段字符串:update table_name set field=CONCAT(field, '分隔符', str);//'分隔符',可以为空,也可以省略updat ...
- js最简单焦点图片轮播代码
将下面代码保存为banner.js,在需要显示焦点图的地方调用该js即可. <script type="text/javascript" src="banner.j ...
- 页面内置函数${fn:}
引入头文件<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions " %&g ...
- nginx反向代理原理及配置详解
nginx概述nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外n ...
- k8spod探测
一.pod存活性探测 pod spec为容器列表中的相应容器定义其专用的探针即可启用存活性探测,目前,k8s的容器支持存活性探测的方法包含:ExecAction.TCPSocketActon和HTTP ...
- css-动画,a标签下,文字加下划线,而且动画是由中间向两边扩展开
效果: html: <div class="warp"> <a class="welcome">期待您的参与</a> < ...
- web前端_css02
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- UML中的类图及类图之间的关系
统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...
- extern、static
1. 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说exter ...
- TTTTTTTTTT TTTTT CF 229C 三角形数量
题意: 有一个无向完全图(任意两个节点之间均有一条边),包含 n(1<=n<=10^6) 个顶点,现在有两个人A 和 B,A从这个无向图中取出 m(0<=m<=10^6) 条边 ...