扩展
2、用户相关
2.1 用户
参考笔记二,P24.3。
用户创建步骤:
// 创建用户
create user 用户名 identified by 密码;
// 修改用户配额
alter user 用户名 quota 空间大小 on 表空间名
// 或:
grant unlimited tablespace to 用户名; // 无限表空间
// 授权
grant 权限 to 用户 [with admin option];
// []内语句的作用是:允许此用户将此权限授予其他用户
// 回收权限
revoke 权限 from 用户;
// 若此用户已将此权限授予其他用户,则回收权限时不会连带回收
其他命令:
alter user 用户 identified by 密码; // 修改密码
alter user 用户名 account lock/unlock; --上锁 / 解锁--
// 用户状态:open(打开。默认)、expired(密码过期)、locked(已锁定)
2.2 对象权限
参考笔记一,P25.23~25。
分类:
select、delete、insert、update、alter(修改)、references(外键)、index(索引)、execute(执行)。
命令:
// 授权
grant 权限[(字段)]|all privileges[(字段)]
on [schema.]Object
to 用户|public [with grant option]
// 回收权限
revoke 权限 on [schema.]Object from 用户;
说明:
- 权限即上述分类;
all privileges指所有对象权限;schema是用户名;Object是对象,指数据表;public指所有用户;with grant option类似with admin option。 - 关于
public对象:既不是用户,也不是角色,为所有用户自动共有。public拥有的所有权限,所有用户都会自动拥有,如:grant create user to public,表示所有用户都有权创建用户; - 若用户有创建对象(如:数据表),则删除用户(
drop user 用户)时需加上cascade,表示“先删除此用户旗下对象,再删除用户”;
2.3 角色
角色创建步骤:
create role 角色名; // 创建角色
grant 权限 to 角色; // 授权
grant 角色 to 用户; // 为用户分配角色
revoke 角色 from 用户; // 收回用户角色
revoke 权限 from 角色; // 收回权限
drop role 角色; // 删除角色
2.4 数据字典
参考笔记一,P23.17、P25.26;笔记二,P58.2。
user_objects --当前用户旗下所有对象--
user_users --查询当前用户--
dba_users/all_users --查询所有用户--
dba_sys_privs/user_sys_privs --查询用户所有系统权限--
dba_tab_privs/all_tab_privs/user_tab_privs --查询用户所有对象权限--
dba_role_privs/user_role_privs --查询用户所有角色--
dba_roles --查询所有角色--
role_sys_privs --查询角色所有系统权限--
3、登录相关
参考笔记二,P24.5/6、P58.1。
3.1 免密登录
Oracle登录命令的形式很多,普遍的两种形式是:
sqlplus /nolog,一般的用途是防止用户名和密码被窥视;sqlplus / as sysdba。(登录用户为sys,身份是sysdba)
为什么可以“免密登录”?
首先,Oracle具有三种身份认证方式:操作系统身份认证、密码文件认证、数据库认证。之所以能“免密登录”,是因为操作系统的当前账户在用户组ora_dba中。(大家可以在“组策略”中看到这个用户组)
3.2 登录
远程登录命令格式:
sqlplus 用户名/密码@ip地址:端口/实例名
例如:
sqlplus scott/123456@localhost:1521/bpmtest
默认端口是1521。
其他命令:
show user // 查看当前用户
// 切换用户
1、conn scott/123456
2、connect /
3、conn / as sysdba
shutdown immediate // 关闭数据库
startup // 打开数据库
5、数据类型
5.1 char族
Oracle中char族数据类型与MySQL中相同,大家可查阅博文《[MySQL]知识点》的第3项,在此不作赘述。
5.2 number(a, b)
参考笔记一,P20.13。
此数据类型为数字,可存储小数。其中,a 是数字位数(包括小数),b 是精确小数位数。
规则:
- 若
b > 0,表示精确b位小数,并四舍五入; - 若
b < 0,表示精确到小数点左b位,并四舍五入,故只能存储整数。如:number(5, 3),可存储五位数整数,个位和十位都为0; - 若
b = 0,则只能存储整数; - 若
a < b,则只能存储-1 ~ 0或0 ~ 1的小数,且小数点右b - a位及其后都必须是0(前后四舍五入都要满足),即精确b位小数。
7、视图(view)
推荐一篇博文《Oracle视图详解》(转发)。
参考笔记一,P22.24、P23.15~17。
7.1 介绍
view可认为是一种绑定了SQL语句的原表“副本”,故当查询视图时,都会重新执行一次SQL语句查询原表,且修改视图记录等同于修改原表记录。
不过,若视图记录是由原表记录经处理后生成,即SQL语句中包含“数据处理”子句或条件时,不允许变动视图记录。“数据处理”子句或条件有:
group函数;- group by;
- distinct;
- 使用表达式定义的字段;
- 伪列
rownum; - 原表在视图中未选择(未
select)的字段的所有数据为非空且无默认值。
当然,并非只要SQL语句中包含了这6个子句或条件,就无法对视图进行全部DML。规则如下:
- 删除视图记录。要求SQL语句中不能包含前3个子句或条件。
- 修改视图记录。要求SQL语句中不能包含前5个子句或条件。
- 新增视图记录。要求SQL语句中不能包含所有子句或条件。
我们也可以干脆在SQL语句末添加with read only子句禁用视图DML。
7.2 数据字典
--当前用户旗下所有视图--
user_views
--显示视图中哪些字段允许DML--
user_updatable_columns
7.3 一个问题
假若SQL语句是:
create view v_emp_1(id, name, sal)
as
select emp_id, emp_name, sal
from emps
where dept_no = 10;
这里dept_no是外键,该视图记录为员工表中隶属部门10的所有员工信息。
现在,我把10改成20。前言道,查询视图是对原表的再次查询,这样修改后,该视图记录就变为部门20的所有员工信息。可是,view是原表的“副本”,既然创建视图时部门编号为10,说明当时我设定该视图的作用是用于快速查询部门10的所有员工信息,那么又怎能允许后续随意修改查询条件(dept_no = 10)。
因此,可以在SQL语句末添加with check option constraint 约束名子句,设置一个约束限制这种修改。
7.4 示例
创建:
create or replace view v as
select '123' as data from dual union all
select 'abc' from dual union all
select '123abc' from dual union all
select 'abc123' from dual union all
select '1a2b3c' from dual union all
select '1a2b3c#' from dual union all
select '3$' from dual union all
select '#a4' from dual union all
select 'a 2 ' from dual ;
数据:

本文持续更新中。。。