数据库知识盖摘

Oracle数据库

初始口令设置为:root或其它
登录 scott /jsl

一、概念介绍

1.1、约束

主键约束(primary key)
唯一性约束(unique)
非空约束(not null)
外键约束(foreign key)
检查约束(check)

主键:

主键是定位表中单个行的方式,可唯一确定表中的某一行,关系型数据库要求所有表都应该有主键,不过Oracle没有遵循此范例要求,Oracle中的表可以没有主键(这种情况不多见)。关于主键有几个需要注意的点:
1.键列必须必须具有唯一性,且不能为空,其实主键约束相当于unique +not null
2.一个表只允许有一个主键
3.主键所在列必须具有索引(主键的唯一约束通过索引来实现),如果不存在,将会在索引添加的时候自动创建

==DDL:==create:创建;drop:删除;alter:修改;
rename:重命名;truncate:截断

==DML:==insert:插入;delete:删除;update:更新;select:查询

==DCL:==grant:授权;revoke:回收权力;commit:提交事务;rollback:回滚事务

Oracle命令不区分下小写,但是数据内容区分大小写

二、select语法

2.1、select的基本结构和简单查询

select *||colname(列名)[,...] from table [alias]

分析:
select关键字后面跟要查询的内容from关键字后面跟数据的来源
解析步骤:1)from找来源 2)select条数据

2.2、去重、取别名、排序

2.2.1、去重

去除重复记录

结构:select distinct colName from tableName

2.2.2、给列取别名

结构:

select colName n from tableName;
select colName as n from tableName;

select ename 名字, sal 工资 from enp;
select ename as 名字, sal as 工资 from enp; 

2.2.3、排序

将查询出来的结果按照指定顺序排序
结构:
select colName1(字段名1), colName2(字段名2) from tableName order by colName;

-- order by
select ename, sal from emp;
-- 查询所有的员工的姓名,工资,按照工资降序排序
select ename, sal from enp order by sal desc;
select ename, sal from enp order by sal asc;

多字段排序

--查询所有的员工姓名,工资,所在的部门编号,按照部门编号升序排序,同一部门的员工,按照工资降序排序
select ename,sal,deptno from emp order by deptno asc,sal desc;

2.3、伪列和虚表

2.3.1、伪列和表达式

说明查询不存在的列即伪列,当需要的结果不能直接从表中得到需要经过计算来展示则可以使用伪列+表达式来实现

-- 查询用户的姓名,工资,年薪(月薪*12)
select ename, sal, sal*12 from emp;
select ename, sal, sal*12 as 年薪 from emp;

1)null处理
nvl()

select ename, sal, comm, sal+comm 月收入 from emp;
--nvl(expl,res)
select ename, sal, comm, sal+nvl(comm,0) 月收入 from enp;
-- 若果comm为空,则sal加零 

2)字符串拼接

||

select ename, ename||'a' 别名 from emp;
 
2.3.2、虚表

dual 虚表

select 666*999 from dual;

小节

--简单查询
-- 去重
-- 取别名
-- 伪列
-- 排序
-- null 当null进行运算时,结果为null
-- 字符串拼接 ||
-- null first  , null last(查询结果,null值在前||在后
select [distinct](去重) 查询字段1 [别名], 查询字段2 [as] [别名], [[表达式] [别名]](伪列) from 数据来源 [[order by] 排序字段,排序字段](默认升序排列)(asc 升序;desc 降序)
-- 语法
select ... from ... order by ...
-- 解析顺序
-- from 表
-- select 内容
-- order by 内容
-- 查询员工的姓名,员工工资 别名为工资,并且将结集按照工资降序排序
select ename, sal as 工资 from emp order by sal desc;

2.4、条件查询

2.4.1、条件运算

=、>、<、<=、>=、<>(不等)、!=(不等)、^=(不等)、between …and… 、in

2.4.2、链接条件运算

and、or、not

-- 查询的数据 *
-- 数据的来源  emp
--条件  deptno=10
select * from emp where deptno = 10;
-- 查询名称‘SMITH’员工的信息
select * from emp where ename = ‘SMITH’;
-- !=  <>  ^=   都是不等号

2.4.3、null运算nvl()

个人感觉不会考(仅仅是个人感觉哈)

null比较特殊需要单独处理
is null、is not null、not…is null

-- nvl() 当某个值为空时给出一个特定的值,否则该值就为它自己
select nvl(null,100) from dual;
-- 非空为它本身,是空则为一百

2.4.4、模糊查询like
% 、 _

-- 查询名称(ename)中包含有'S'的员工信息
select * from emp where ename like '%S%';
-- 查询JOB字段中包含有'A'的员工信息
select * from emp where JOB like '%A%'
-- 查询名称以'A'开头的员工信息
select * from emp where ename like 'A';
-- 查询名称中第二个字母为'A' 的员工信息
select * from emp where ename like '_A%';
-- 查询名称中倒数第二个字母为'I'的员工信息
select * from emp where ename like '%I_' 

2.5、where子查询

-- 数据来源 员工表 emp
-- 筛选条件  所在部门为销售部  SALES 部门编号
select * from emp where deptno=(select deptno from dept where dname='SALS');
--1) from
--2) where
--  11) from
--  12) where 
--  13) select

-- 查询工资等级为2的员工信息
select * from emp where sal between (select losal from 
salgrade where grade=2) and (select hisal from salgrade
where grade=2); 

四、函数

4.1、函数介绍

4.2、常用单行函数

4.2.1、字符函数

concat(x,y) 连接字符串x和y
instr(x,str,start,n). 在X中查找STR,可以指定从START开始,也可以指定从第N次开始
length(x) 返回X的长度
lower(x) x转换为小写
upper(x) x转化为大写
ltrim(x,trim_str) 把 x左边截去trim_str字符串,缺省截去空格
rtrim(x,trim_str) 把 x右边截去trim_str字符串,缺省截去空格
replace(x,old,new ) 在x中查找old,并替换为new
substr(x,start,length) 返回x的字符串,从start处开始,截取length个字符,缺省length,则默认到结尾

4.2.2、数学函数

abs(x) x的绝对值
ceil(x) 向上取整
floor(x) 向下取整

4.2.3、日期函数(不常考)

sysdate 当前系统时间
cuttent_date 返回当前系统日期
add_months(d1,n1) 返回在日期d1基础上再加n1个月后新的日期
last_day(d1) 返回日期d1所在月份最后一天的日期
months_between(d1,d2) 返回日期d1到日期d2之间的月数
next_day(d1,[c1]) 返回日期d1在下周,星期几(参数c1)的日期

4.3、常用组函数

组函数同时对多条记录进行操作,并返回一个结果

avg() 平均值
sum() 求和
min() 最小值
max() 最大值
count() 统计
注意 : null不参与运算

-- count() 查询数量
select count(enpno) from emp;

-- max() 最大值 所有员工中工资最高的金额
select max(sal) from emp;

-- min() 最小值 所有员工中工资最低的金额
select min(sal) from emp;

-- sum() 求和  一个月公司需要发出多少工资
select sum(sal) from emp;

-- avg() 平均值  求一下平均工资
select avg(sal) from emp;

4.4、group by分组

group by分组,将满足条件的记录进一步按照某特性进行分组。提取记录中的共性
结构:select…from…where…group by…

按部门分组,求平均工资(查询每个部门的平均工资)

-- 求出每个部门的平均工资
-- 找到公司emp
-- 按照部门分组 deptno
-- 求平均工资 avg()
-- select ...from ...group by ...
select deptno,avg(sal) from emp group by deptno;

-- 求出每个工种(job)对应的平均工资
-- emp
-- group by job
-- select avg(sal)
select job,avg(sal) from emp group by job;

-- 求出有员工的每个部门的人数
-- emp
-- group by deptno
-- count(*)
select deptno,count(*) from emp group by deptno;

4.5、having的使用

-- 查看平均工资大于2K的部门的部门编号和平均工资
-- 求出每个部门的平均工资
-- 保留平均工资在2K以上的组信息记录
select deptno, avg(sal) from emp group by deptno having avg(sal)>2000; 
-- from
-- group by
-- having
-- select 

-- 查看部门里员工数大于3人的部门编号和人数
select deptno, count(*) from emp group by deptno having count(*)>3; 

4.6、过滤行记录和组信息

行记录的过滤是针对每条记录的筛选,组信息的过滤是针对组的筛选,是可以同时出现的,先筛选行,在过滤组。

where筛选行,只能出现行信息
having过滤组,只能出现组信息

结构:select …from…where …group by…having…

执行顺序:

from
where
group by
having
select

-- 查询部门编号和部门里面的员工数量
-- 只统计工资大于2000的员工
-- 并且是工资大于2000的员工数量在2及其以上的部门
select deptno,count(*) from emp where sal>2000 group by deptno having count(*)>=2;

五、分页和去重

5.1、分页 rownum

-- rownum 是对每一个结果集中的每一条记录的编号   从1开始
select ename, sal, deptno, rownum from emp;
select ename, sal, deptno, rownum from emp where deptno=30;

-- 进行分页,每一页显示5条记录,查询第一页的数据
select ename, sal, deptno, rownum from emp where rownum<=5; 

--查询所有的员工信息,并且加上伪列rownum
select ename, sal, deptno, rownum from emp;
-- 将查询出来的结果及作为临时的数据来源
select * from (select ename, sal, deptno, rownum as rw from emp) where rw>1;
-- 查询第二页的数据
select ename, sal, deptno, rownum from (select ename, sal, deptno, rownum as rw from emp) where rw<=10 and rw>5;

-- 查询员工的信息,姓名,工资,部门编号,按照工资降序排序,实现分页
-- 每一页显示3条记录,查询第一页的数据
select ename, sal, deptno from emp order by sal desc;--来源
select ename, sal, deptno from (select ename, sal, deptno, rownum rw from (select ename, sal, deptno from emp order by sal desc)) where rw>=1 and rw<=3;

  

5.2、去重

六、表链接

6.1、表连接介绍

​ 当我们获取的数据不是来自于同一张表而是来自于多张表时就需要使用到表连接。表连接就是一个表的行根据指定的条件跟另一个表的行连接起来形成新的行的过程。

​ 简单来讲,我们将数据存在不同的表中,而不同的表有着它们自身的表结构,不同表之间可以是有关联的,大部分实际使用中,不会仅仅只需要一张表的信息,比如需要从一个班级表中找出北京地区的学生,再用这个信息去检索成绩表中他们的数学成绩,如果没有多表连接,那只能手动将第一个表的信息查询出来作为第二个表的检索信息去查询最终的结果,可想而知这将会是多么繁琐。

连接查询:
1)即查询的时候同时需要多张表(特别是存在外键关系的),此时需要多张表之间的值进行连接;2)目前SQL标准提出过两种连接查询,第一种是较早的SQL92标准,第二种是目前使用广泛的较新的sQL99标准;3)92形式简单,但编写较为冗长,99不仅在底层得到优化,而且形式看上去更加一目了然,逻辑性更强,一般建议使用99标准;

6.2、92语法

​ 多张表需要全部放在from之后,所有的连接条件都放在where当中,因此SQL92中的等值连接、非等值链接、外连接等等其实只是where条件的筛选

结构:select … from table1, table2, table3, … where…
很多时候需要为表取别名(1、简化表名 2、可能存在自连接的情况)
链接的原理:按照from后面表的出现顺序,前面的表作为内存的for循环,后出现的表作为外层得for循环

select * from emp e;
– 查询emp表和dept表中的数据
select * from emp e, dept d where 1=1 order by empno;

6.2.2、等值连接

-- 查询每一个员工的信息以及所在部门的信息
-- 查询的数据:员工信息,部门信息
-- 数据来源;emp,dept
-- 连接条件; emp.deptno = dept.dept.no
select * from emp e, dept d where e.deptno = d.deptno;

-- 查询出每一个有员工存在部门的信息和部门人数
-- 查询数据;部门信息,对应的部门的人数
-- 数据来源;dept,emp经过计算
-- 链接条件;dept.deptno = 人数对应的.deptno
select count(*) from emp group by deptno;
select * from dept d, (select count(*) from emp group by deptno) c where d.deptno = c.deptno; 

6.2.3、非等值连接

-- 查询每一个员工的姓名,工资金额,入职时间,对应工资等级
-- 数据来源;emp,salgrade
-- 连接条件;emp.sal between losal and hisal

select * from emp;
select * from salgrade;

select ename, sal, hiredate, grade
from emp e, salgrade s
where e.sal between losal and hisal;
 
-- chaxun每一个部门的信息和部门人数
select * from dept;
select * from emp;

select count(*), deptno from emp group by deptno;
select dept from emp e, (select count(*),deptno from emp group by deptno) s where e.deptno = s.deptno;

-- 列出所有的员工信息以及其上级的信息
-- 查询数据:员工信息,上级信息
-- 数据来源:emp e, emp m;
-- 连接条件:e.mgr = m.empno(+)
select * from emp e, emp m, where e.mgr = m.empno(+);

6.2.4、自连接

-- 查询出每一个员工(有上级存在的员工)自己的信息,以及上级的信息
-- 查询的数据来源:员工信息,上级的信息
-- 数据的来源:emp e, emp m
--链接条件: e.mgr = m.empno

select * from emp e, emp m where e.mgr = m.empno;

6.3、99语法

6.3.1、cross join

交叉连接,实现笛卡尔积….(不理解)

-- 99标准中实现笛卡尔积  cross join
select * from dept cross join emp;

6.3.2、natural join

需要有(同名列,主外键)
自然连接,做等值连接
查询所有员工姓名及其所在部门的名称

-- 查看所有员工名称,员工编号,所属的部门编号,部门名称
-- 查询的数据:员工名称,员工编号,所属的部门编号,部门名称
-- 数据来源;emp,dept
-- 链接条件;emp.deptno = dept.deptno
-- 99 可以使用自然连接来实现 natural join
select ename, empno, deptno, dname from emp natural join dept;

6.3.3、join using(同名列)

using链接,等值连接
查询所有员工姓名及其所在部门

-- 99 可以使用using连接实现(等值)
select ename, empno, deptno, dname from emp join dept using(deptno);

-- 99 关键字
-- cross join
-- natural join 必须有同名列,存在主外键关系;等值连接
-- join using   必须有同名列  using(列):等值连接

-- 查询10部门的员工名称,部门编号,部门名称
-- 只能是10部门的
-- 自然连接实现
select ename, deptno, dname from emp natural join dept where deptno = 10; -- natural join
select ename, deptno, dname from emp join dept using(deptno) where deptno = 10; -- join usings

6.3.4、join on

on 链接,可做等值连接,非等值连接,自连接,可以解决一切链接,关系列必须要区分查询所有员工姓名及所在部门的名称

-- 查看所有员工的姓名,编号,以及所属的部门编号,部门名称
-- 查询数据:员工姓名,编号,部门编号,部门名称
-- 连接条件:emp.deptno = dept.deptno
-- 使用on链接实现
-- 同名列前是否需要加限定词,如果使用的自然连接using链接不用加
-- 如果不是则需要加
select ename, empno, e.deptno, dname
from emp e
join dept d
on e.deptno = d.deptno;  

-- 查看每一个员工的姓名,工资,所属的部门编号,工资等级
-- 查询的数据:员工姓名,工资,所属的部门编号,工资等级
-- 数据来源:emp salgrade
-- 链接条件:sal between losal and hiosal
-- join on 实现
select ename, sal, deptno, grade
from emp e
join salgrade s
 on sal between losal and hisal;
 
 -- 查询30部门员工姓名,工资,部门编号,工资等级,部门名称
 -- 查询内容:员工姓名,工资,部门编号,工资等级,部门名称
 -- 数据来源:emp e, salgrade s, dept d
 -- 连接条件:e.deptno = d.deptno  e.sal between losal and hisal 
 -- where e.deptno = 30  join on 实现
 select ename, sal, deptno, salgrade, dname
 from emp e join dept d
 on e.deptno = d.deptno
 join salgrade s
 on e.sal between losal and hisal
 where e.deptno = 30; 

6.3.5、outer join

外连接,有主表和从表一说

left [outer] join on
left [outer] join using
right [outer] join on
right [outer] join using

建议使用join on

-- 查看每一个员工的编号,员工名称,上级编号,上级名称
-- 查询数据:员工编号,员工名称,上级编号,上级名称
-- 数据来源:emp e, emp m
-- 链接条件:e.mgr = m.empno
-- on 链接实现 外连接
select e.empno 员工编号,
       e.ename 员工名称,
       e.mgr   上级编号,
       m.ename 上级名称
from emp e
left outer join emp m
  on e.mgr = m.empno; 
  

小结

-- 表连接  当查询的数据来自多于一张表时
-- 笛卡尔积
-- 等值连接
-- 非等值连接
-- 自连接
-- 外连接

-- 92标准
select ... from table1, table2 where table1.xx = talbe2.xx and table1.xx = x;
select ... from table1, table2 where table1.xx[主表] = table2.xx(+)[从表] and table1.xx = x;

-- 99标准
select ... from table1 cross join table2 where ... 
select ... from table1 natural join table2 where ... 
select ... from table1 join table2 using(字段名) where ...
select ... from table1 join table2 on 连接条件 where ... 
select ... from table1 [rigth or left] join table2 on 连接条件 where ...
-- 全连接
select ... from table1 full join table2 on 连接条件 where ... 

6.4、集合操作

Union、 Union All、 Intersect、 Minus

Union,并集(去重)对两个结果集进行并集操作,不包括重复行同时进行默认的规则的排序;
Union All,全集(不去重)对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect, 交集(找出重复)对两个结果集进行交集操作,不包括重行,同时进行默认规则的排序;
Minus,差集(减去重复)对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序

第七章、DDL语法

SQL语句主要可划分为以下三个类别

​ DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用的语句关键字主要包括create、drop、alter等。

​ DML(Data Manipulation Languages)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性。冲用的语句关键字主要包括insert、delete、update和select等

DCL (Data Control Language) 语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,主要的的语句关键字包括grant、revoke等。

7.1、表操作

7.1.1、创建表

1)创建新表

create table 表名(
	字段名  类型(长度),
    ...其他字段...

);

2)从其他表拷贝结构

create table 表名 as select 字段列表 from 已有表 where 1!=1;

7.1.2、修改表结构

1.修改表名

rename 原表名 to 新表名
rename tb_txt to tb_txt_new;

2.修改列名

alter table 表名 rename column 列名 to 新列名
alter tb_txt_new rename column txtid to tid;

3.修改字段类型

alter table 表名 modify (字段 类型)
alter table tb_txt_new modify (tid varchar2(20));

4.添加列

alter table 表名 add 字段名 类型
alter table tb_txt_new add col_test_name varchar2(30);

5.删除列

alter table 表名 drop column 字段名
alter table tb_txt_new drop column col_test_name;

6.删除表

drop table 表名
drop table tb_txt;

7.2、约束

数据库约束有五种:

  1. 主键约束(primary key)
  2. 唯一性约束(unique)
  3. 非空约束(not null)
  4. 外键约束(foreign key)
  5. 检查约束(check)

7.2.1、创建表和约束

-- 创建表的同时,将表约束进行创建,约束不设定名称

create table tb_user(
	userid number(5) primary key, --唯一且非空
    username varchar2(30) check(length(username) between 4 and 20) not null,
    userpwd varchar2(20) not null check(length(userpwd) between 4 and 18),
    age number(3) default('男') check(age>=18),
    gender char(3) default('男') check(gender in('男','女')),
    email varchar2(30) unique,
    regtime date default(sysdate)
)
 
-- 创建文章表(tb_txt)

create table tb_txt(
	txtid number(5) primary key,
    title varchar2(32) not null check(length(title)>=4 and length(title)<=30),
    txt varchar2(1024),
    pubtime date default(sysdate),
    userid number(5) references tb_user(userid) on delete set null
) 

约束追加

alter table tb_user add constraint pk_user_id primary key(userid); -- 追加主键约束
alter table tb_user add constraint ck_user_name check(
length(username) between 4 and 20); -- 追加一般检查约束
alter table tb_user add constraint ck_user_gender check(gender in('男','女'));
alter table tb_user add constraint uq_user_email unique(email); -- 追加唯一约束

alter table tb_user modify(username constraint nn_user_name not null); -- 追加非空约束
alter table tb_user modify(age default(18)); -- 追加默认约束

-- 删除约束
alter table tb_user drop constraint ck_user_name;

第八章、DML

8.1、DML介绍

​ DML(Data Manipulation Language数据操控语言)用于操作数据库对象中包含的数据,也就是说操作的单位是记录。
Oracle数据库的DML表数据的操作有三种:

insert 插入
update 更新
delete 删除

8.2、添加

insert into 表名 [(字段列表)] values(值列表);

insert into tb_user values(1001,'test1','test2',null,'女',null,sysdate);
insert into tb_user_copy values(select * from tb_user);
-- 添加时指定列和顺序
insert into 表名 (指定列) values(值列表);

insert into tb_user(username, userid, userpwd) values('tom',1002,'tompwd');
insert into tb_user(username, userid, userpwd) values(select username, userid, userpwd from tb_user);

其他

1、视图

创建视图需要使用create view 语句,其语法如下:

create [or replace] [force||noForce] view view_name as subquery (子查询语句) [with {check option|read only} constraint constraint_name]

重点:create view 视图名称 as 子查询语句;

create view view_name
as subquery;

例子1:

create view emp_view
as select empno, ename, job, sal, deptno
from emp where sal>3000;

select * from emp_view;

例子2:

create view emp_view2
as select empno, ename, job, sal*1.1 new_sal, deptno
from emp where sal*1.1>2500;

select * from emp_view2;

例子3:

create view emp_view3
as select e.empno, e.ename, e.job, e.sal, d.dname
from emp e left join dept d on e.deptno = e.deptno;

select * from emp_view3;

PL/SQL基础

声明常量时要使用constant 关键字

%TYPE 类型用于隐式的 emp_name emp.ename%TYPE

%ROWTYPE 非常强大 emp_one emp%ROWTYPE

变量声明:

declare
emp_number constant number(4) := 7900;
emp_name varchar2(10);
emp_job varchar2(9);
emp_sal number(7,2);
begin
select ename, job, sal into emp_name, emp_job, emp_sal
from emp where empno = emp_number;
DBMS_OUTPUT.PUT_LINE(emp_number);
...
end;

2、存储过程的创建与调用

待补充

创建存储过程:

create or replace procedure procedure_name(参数1, 参数2 ... )
as || is
[declaration_section(声明变量);]
begin
procedure_body;
end [procedure_name];

例子:

-- 创建不带参数的
-- emp表中empno = 6500的员工更名为糖果
create or replace procedure update_emp
as [变量声明]
begin 
update emp set ename = 'candy' where empno = 6500;
end update_emp;

-- 执行  call || execute
call update_emp;exec update_emp;
-- 传入两个参数 调用提供empno,ename
create or replace procedure update_emp2
(emp_no in number, emp_name in varchar2) as
begin 
update emp set ename = emp_name where empno = emp_no;
end update_emp2;

-- 调用
call update_emp2(6500,'糖果');

删除过程:

drop process 存储过程名

3、函数的创建与调用

待补充

创建:

create [or replace] function function_name
[传递参数]
return 返回值的类型
as [声明部分] 
begin 
function_body
end [function_name];

例子:

create function get_ename(emp_num number)
return varchar2 as
emp_name emp.ename%TYPE;
begin
select ename into emp_name from emp where empno = emp_num;
return emp_name;
end get_ename;
/

-- 调用
get_ename(6500);

4、数据库安全

用户

创建
create user user_name
identified by password
[default tablespace default_tablespace_name]
[temporary tablespace temporary_tablespace_name]
[
    quota 大小 [K||M] || unlimited on tablespace_name
    ....
]
完结吧!

例子:

create user user1
identified by user1password
default tablespace users
temporary tablespace temp
quota 20m on users;
-- 三到五行记不起来就都别写了
修改

alter user user_name identified by new_password;

alter user 用户名 identified by 新密码;

删除

drop user user_name [cascade];

权限(部分)

系统权限说明
create session链接数据库
create tablespace创建表空间
create user创建用户
create table创建表
create any table在任何用户模式中创建表
select any table查询任何用户模式中基本表的记录
create view创建视图
create any view在任何用户模式中创建视图
create role创建角色
grant any role将任何角色授予其他用户
alter database修改数据库结构
create procedure创建存储过程
create any procedure在任何用户模式中创建存储过程
create profile创建配置文件

授权和撤销

授权:

grant object_privilege [,...] on object_name to user_name || role_name [,...];

例子:

grant select on emp to user1;
grant update(empno, ename) on emp to user1;
grant create session to user1; -- 链接数据库
grant create any table to user1; -- 在任何用户模式中创建表
grant select any table to user1; -- 查询任何用户模式中基本表的记录
grant create procedure to user1; -- 创建存储过程

撤销:

grant object_privilege [,...] on object_name from user_name || role_name [,...];

举个栗子:

revoke select on emp from user1;
revoke update(empno, ename) on emp from user1;

角色

创建角色

create role role_name [not identified || identified by password];

栗子:

connect system/admin
create role emp_manager identified by emp_password;
为角色授予权限

开篇来一句 类似于用户授权

connect scott/tiger
grant select, update, insert, delete
on emp to emp_manager;
为用户授予角色
connect system/admin; -- 链接
create user emp_user identified by emp_password; -- 创建用户
grant emp_manager, create session to emp_user; -- 将角色emp_manager 授予角色emp_user

声明:部分内容转载自B站编程酱酱紫
不正之处,欢迎大佬指正

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值