Oracle基础

来源:互联网 发布:js控制video全屏播放 编辑:程序博客网 时间:2024/06/01 10:11

              Oracle

1.基础知识

1.数据库系统和数据库的管理系统
  数据库系统=数据库的管理系统+oper+硬件
2.Java学习路线
   算法和数据结构
3.Oracle认证
  OCA
  OCP
  OCM
4.Oracle版本 8,9i/ 10,11g  /12c
5.实例和数据库
  数据库 就是硬盘上的文件 ,指的是数据文件
  实例:数据库服务启动后,在内存中的一个结构

6.MYSQL数据文件的后缀
  MYSQL数据库的引擎
     INNODB 支持事务的  
     MYISAM   不支持事务

  数据文件:INNODB:以.frm和ibd ibd中

MYISAM:.frm 表结构  .myi 索引  .myd 数据
6.使用ORacle
   1.server is start  contains two :listener  dbserver
      顺序:先监听,再数据库服务
   2.客户端连接
      PL/SQL developer  
 7.root   root
 8.Oralce三种用户
   sys:超级管理员  管理普通管理员 orcl
   system:orcl
   scott: tiger  通过命令解锁用户
 9.用MyEclipse连接Oracle
     app----->happy--->oradata和Product(jdbc---->lib----->ojdbc6.jar)
 10.关于三种数据库的默认端口号
    SQLSevver :1433
    MySQL: 3306
    Oracle:1521

11. 常用四种类型

   number 数字类型

   nvarchar2   字符串

   clob     大文本

   blob      二进制

  rowid    rownum   伪列



 

 

2.查看当前用户的角色和权限

查看当前用户的角色 
SQL>select * from user_role_privs; 
SQL>select * from session_privs 

查看当前用户的系统权限和表级权限 
SQL>select * from user_sys_privs; 
SQL>select * from user_tab_privs; 
附:

一、查看用户:
1.查看当前用户:
  select * from v$session;
2.查看所有用户:
  select * from dba_users;
  select * from all_users;
  select * from user_users;

二、查看角色:
1.当前用户被激活的全部角色
  select * from session_roles;
2.当前用户被授予的角色
  select * from user_role_privs;
2.全部用户被授予的角色
  select * from dba_role_privs;
3.查看所有角色:
  select * from dba_roles;
4. 查询当前角色被授予的角色
  Select GRANTED_ROLE from ROLE_ROLE_PRIVS where ROLE=&ROLE;--例如role= 'DBA'


三、查看权限:
1.基本权限查询:
select * from session_privs;--当前用户所拥有的全部权限
select * from user_sys_privs;--当前用户的系统权限
select * from user_tab_privs;--当前用户的表级权限
select * from dba_sys_privs;--查询某个用户所拥有的系统权限
select * from role_sys_privs;--查看角色(只能查看登陆用户拥有的角色)所包含的权限

2.查看用户对象权限:
  select * from dba_tab_privs;
  select * from all_tab_privs;
  select * from user_tab_privs;

3.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
  select * from V$PWFILE_USERS

注意:
1、以下语句可以查看Oracle提供的系统权限
select name from sys.system_privilege_map

2、查看一个用户的所有系统权限(包含角色的系统权限)
Sql代码 
select privilege from dba_sys_privs where grantee='DATAUSER'  
union  
select privilege from dba_sys_privs where grantee in (select granted_role fromdba_role_privs where grantee='DATAUSER' );  

 

 developer

 1.表能否被访问到,要看当前登录用户是谁?

 解析:A(Scott)用户了,我想要访问B用户(HappyY2164)的Userinfo表

 方案1:直接授权法

 

      1.用b用户的身份登录,然后执行以下指令

        grant select on HAPPYY2164.userinfo toscott

 

       2.用A登录,然后执行以下查询

      select * from HAPPYY2164.userinfo

     

     

 方案2:直接授角色法

 

   1.先用system登录,我自定义一个角色role_testy2164

      create role role_testy2164

     

        2.将权限和某个角色进行绑定

      grant select on happyy2164.userinfo to role_testy2164

     

        2.做一个授权操作,将角色授权给用户

          grant role_testy2164 to scott

 

 

   ROWNUM 查询返回的是结果集中行的序号,可以使用它来限制查询返回的行数

  通过测试可知,Rownum只能对=1和<N进行筛选,如果>M不能筛选,如何规避。

通过子查询构建临时表,让伪列Rownun成为临时表中的列,然后限定条件使用伪列的

别名。

查询emp表的第三条记录

select *from

(

  select ename,rownumrnfrom emp

) temp wherern= 3;

查询薪资排名第五的员工信息

 

select *from

 (

    select sal,ename,rownumrnfrom (select* fromemp order bysal desc) temps

) temp

where rn=5;

 

 

一.角色和权限(1)A用户访问B用户下的表,但是没有dba权限   方案一直接授权法:用B用户登录,执行  (grant   select   on   B用户.表名   to   A用户)                 然后用A用户登,执行(select  *  from  B用户.表名)即可查询B用户下的表  方案二授予角色法:用system登录,自定义一个角色,(grant   role   角色名)                                  将访问B用户表的权限赋予这个角色(grant   select   on   B用户.表名   to   角色名)                                   将这个角色再赋予A用户(grant  角色名   to  scott)    
   收回B用户赋予A用户的权限:(revoke  select  on  B用户.表名  from  A用户) (2)角色和权限的关系   一个角色可以囊括多个权限,多个权限可以隶属于一个角色二.常用数据类型    三. sql简介
解锁用户alter    user   用户名    account   unlock四.sql查询1.查询emp表自然排序下的第三条记录SELECT   *   FROM  
(
   SELECT   ename,ROWNUM  run  FROM   emp  WHERE  ROWNUM<=3
)temp
WHERE   TEMP.run=3
ROWNUM 查询返回的是结果集中行的序号,可以使用它来限制查询返回的行数  通过测试可知,Rownum只能对=1和<N进行筛选,如果>M不能筛选,如何规避。通过子查询构建临时表,让伪列Rownun成为临时表中的列,然后限定条件使用伪列的别名。2.查询员工表中薪资排名第五的员工SELECT  *  FROM 
(
   SELECT  ename,ROWNUM  rn  FROM (SELECT   *   FROM   EMP  ORDER  BY  SAL DESC) temps
)temp
WHERE  rn=5
3.oracle sql分页实现SELECT  *  FROM 
(
   SELECT  ename,ROWNUM  rn  FROM (SELECT   *   FROM   EMP  ORDER  BY  SAL DESC) temps   where  ROWNUM <=10
)temp
WHERE  rn>=6
4.查询表中无重复记录的学生的年龄SELECT  DISTINCT STUAGE  FROM  STUDENT
5.利用现有表创建新表(1)选择所有数据CREATE  TABLE  STUDENT1
AS
SELECT  *  FROM  STUDENT
(2)选择指定的列CREATE  TABLE  STUDENT2
AS
SELECT  stuname,stuage  FROM  STUDENT
(3)只保留表结构,不保留数据CREATE  TABLE  STUDENT1
AS
SELECT  *  FROM  STUDENT
where  1=26.查询表中有多少条记录select   count(*)  from  student   //执行效率低select   count(1)  from  student   //执行效率高
7.删除有重复数据的记录并保留年龄最大值的一列Delete  from    student   where  ROWID  not  in(select  max(ROWID)  from   student  group  by  stuname,stuage  HAVING(count(*)=1)unionselect  max(ROWID)  from   student  group  by  stuname,stuage  HAVING(count(*)>1))8.sql操作符(1)算数操作符   +   -  *  /(2)比较操作符    >  <(3) 逻辑操作符  and    or(4)集合操作符  UNION(联合)    可以去重UNION   ALL(联合所有)  不可以去重INTERSECT(交集)   查询共有的内容MINUS(减集)  返回第一个查询检索出的记录减去第二个查询检索出的记录之后剩余的记录(5)连接操作符  ||

 

原创粉丝点击