oracle学习笔记

1 启动oracle服务(使用oracle必须启动的两个服务)

监听和实例(lsnrctl意识是listener-control)

启动监听服务 ->lsnrctl start (+监听的名字,不写为默认名字)

停止监听服务 ->lsnrctl stop (+监听的名字,不写为默认名字)

启动数据库实例 -> oradim -starup -sid orcl(实例名)

(或者 -> net start OracleServiceORCL)

说明:启动数据库实例就是启动一个数据库;

      也可以同时启动多个实例;              


2 oracle系统默认的三个用户

SYS用户:超级管理员,权限最高,它的角色是DBA。默认密码是change_on_install。具有创建数据库的权限

SYSTEM用户:系统管理员,权限很高,它的角色是DBA operator,默认密码manager。不具有创建数据库的权限!

普通用户(normal),如系统安装时的scott用户,默认密码是tiger。普通用户的权限是SYS用户或SYSTEM用户给的,如果没有给,那普通用户连很基本的访问权限,连接权限也没有。

3 创建用户

用户登录 –> conn user/password@ip(网络服务器名)[若是特权用户必须带上 as sysdba ]

用超级用户登录 ->sqlplus / as sysdba;

显示用户 ->show user;

创建用户 ->create uesr username(用户名) identified by password(密码);

修改当前用户的密码 –> passw;(说明:如果要修改其他用户的密码,需要sys/system登录);

删除当前用户 –> drop user username cascade;(如果删除的用户已经建立了表,则必须带cascade关键字);

断开与当前数据库的链接 -> disconn;

断开与数据库的链接,并退出 –> exit;

4 系统权限

创建会话权限(用户授权) ->grant create session to username;

撤销创建会话权限 -> revoke create session from userename;

创建表权限 ->grant create table to username;

撤销权限创建表权限 ->revoke create table from username;

创建表空间权限 ->grant unlimited tablespace to name;

撤销创建表空间权限 ->revoke unlimited tablespace from username;

创建表 ->create table tablename(id int);
_
获取系统信息 ->select * from user_sys_privs;

所有用户授权(public)-> grant create session to public;


5 对象权限(对象向对象授权,谁拥有权限谁授权)

对象授权 -> grant select on table1 to username2;

全部授权 -> grant all on table1 to username2;

所有用户授权 -> grant all on tabe1 to public;

撤销授权 -> revoke all on table1 from username2;

对象所有表的权限 -> select * from user_tab_privs;

指定用户对表的某一列进行操作 ->grant update|insert(某一列) on mytable to username1;(查询,删除不能控制到列)

查询对列的操作权限 -> select * from user_col_privs;


6 权限传递

系统权限实现权限传递 -> grant create table|alter any table|(权限) to username with admin option;

对象权限实现权限传递 -> grant select on mytable to username1 with grant option;


7 角色(权限的集合)

创建角色 -> create role myrole;

赋予角色权限 -> grant create table,create session to myrloe;

角色赋予用户 -> grant myrole to username;

删除角色 ->drop role myrole;

注意:

有些系统权限无法赋予角色

如:unlimited tablespace,alert table,drop table

表示属于某个用户的,但是角色是不属于某个用户的。


8 修改用户密码

修改普通户密码 -> alert user username identified by newpassword;


9 补充命令

获取一个数据库中有多少张表 -> select * from tab;

获取表的完整结构 -> desc tablename;

10 文件操作命令

运行sql脚本 –> start  d:/aa.sql; (->@  d:/a.sql;)

编辑sql脚本 –> edit  d:/aa,sql;

将sql*plus屏幕上的内容输入到指定文件 –> spool d:/bb.sql; (创建bb.sql文件)
                                       Spool off;

 

10 显示和设置环境变量

展示行的宽度 -> show linesize

设置行的宽度 –> set linesize 100;

展示每页显示的行数 –> show pagesize

设置每页显示的行数 -> set pagesize 10

 

11 oracle 基本查询

查看表的结构 –> desc tablename;

查看取消重复行 –> select distinct 【列名】from tablename;

如何处理null值?函数 nvl(row1,row2),如果row1为null 则就用row2所替代,如果row1不为空就取row2的值;

Oracle查询日期格式为“day/month月/year”或者“day-month月-year”;

如何使用like? %表示0到多个任意多的字符, _ 表示单个的任意字符;

排序查询(order by)-> select * from tablename order by row (asc/desc);(说明:默认排序是升序排列,asc是升序排列,desc是降序排列);

多个字段排序 -> select * from emp order by row1 (asc),row desc;

使用别名排序 –> select row1 as name,row2 from tablename order by name;

12 oracle 复杂查询(数据分组)

分组函数:
查询最大值 –> select max(row) from tablename
查询最小值 –> select min(row) from tablebname;
查询某一列值的总和 -> select sum(row) from tablename;
查询某一列值的平均值 –> select avg(row) from tablename;
查询表的总行数或者某一列非空值的总行数 –> select count(*/row) from tablename;

group by 和 having 子句:
group by 用于对查询结果进行分组统计 –> select 表达式1,表达式2,…,row1,row2,… from tablename group by row1,row2,..;
Having 用于限制分组显示结果 –> select 表达式1,表达式2,…,row1,row2,… from tablename group by row1,row2,.. having (条件); (说明:条件中所用的参数必须是select后面的表达式或者row);

数据分组总结:
分组函数只能出现在选择列表,having,order by子句中;
如果select子句中同时出现 order by,having,group by中那么他的顺序是group by….having….order by ;
在选这列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在group by子句中,否则就会出错;

13  oracle 复杂查询(子查询)

不同表之间进行查询 –> select a1.row1,a1.row2,…a2.row1,a2.row2,…from table1 a1,table2 a2 where a1.row1=a2.row1(条件);

内连接查询(一个表链接自身)-> select a1.row1,….,a2.row,…. From table a1,table a2 where a1.row1=a2.row2(条件);

子查询?子查询是指嵌入在其他sql语句中select语句也叫嵌套语句;

单行子查询?是指只返回一行数据的子查询 -> select * from table where row = (select row from table/table1 where [条件]);

多行子查询?是指返回多行语句的子查询 -> select * from table where row in (select row from table/table1 where [条件]);

多行子查询中使用all -> select * from table where row > all(select row from table/table1 where [条件]);

多行子查询中使用any -> select * from table where row > any(select row from table/table1 where [条件]);


多行子查询(特例)-> select row1,row2,…from table where (row1,row2,….)=(select row1,row2,…from table where(条件));

把一个子查询看做一个子表->select a1.row1,a1.row2,a2.row1,a2.row2,… from table1 a1 ,(select row1,avg(row2),max(row3),….from table2 group by row1) a2 where a1.row=a2.row(条件);

14 oracle 复杂查询(分页查询)
Oracle分页查询(三种,介绍其中一种 rownum分页)

Rownum分页
 建立视图 -> select * from table
 显示rownum(oracle分配行id号)->select a1.* ,rownum rn from (select * from table) a1;
 进行分页,如显示从5—10行的数据:
显示小于等于10行一下的数据-> select a1.* ,rownum rn from (select * from table) where rownum <= 10;
显示5—10行一下的数据->select * from (select a1.* ,rownum rn from (select * from table) a1 where rownum <= 10) where rn>=5;
 对查询进行变化,如指定查询列,对查询进行排序只需修改最里层的查询;
指定查询列 ->select * from (select a1.*,rownum rn from (select row1,row2,row3,… from table) a1 where rownum <= 10) rn >=5;
对查询进行排序 –> select * from (select a1.*,rownum rn from (select row1,row2,row3,… from table order by row1) a1 where rownum <= 10) rn >= 5;

Rowed 分页(不做介绍);

分析函数分页(不做介绍);

15  oracle 复杂查询(合并查询)
再实际应用中,为了合并多个select查询结果,可以使用集合操作符号 union,union all,intersect,minus;
 Union 该操作符用于取的两个结果的并集->select * from tablename1 where (条件) union select * from tablename2 where (条件); 
 Union all 该操作符赋予union 相似,但是不会消除重复行,不会进行排序;
 Intersect 该操作符用于取得两个结果的交集;
 Minus 该操作符用于取得两个结果的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据;

补充:
设置显示执行SQL语句所消耗的时间 -> set timing on;

疯狂复制法 -> insert into tablename(row1,row2,row3,……) select * from tablename; 

用查询结果创建表
 (这种命令是一种快速的创建表方式) –> create table tablename2(row1,row2,row3) as select row1,row2,row3 from tablename1;(说明在创建表的同事也将查询结果的数据导入新创建的表中);

衡量一个程序员的标准
 对 SQL  语句的使用;
 对网络的了解;
 对程序的优化;


16  JAVA操作ORACLE
一、 Java如何连接oracle
举例说明:写一个showEmp.java 分页显示emp表中的数据:
Emp表中的数据如下:
 
 Java 操作 oracle有两种操作方式
1. Jdbc-odbc桥连接
a) 通过ODBC数据源配置
b) //1.加载jdbc-odbc数据库驱动
 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   //2.获取链接
Connection  conn = DriverManage.getConnection(“jdbc:odbc: testOra”,”userName”,”password”); (说明:testOra 是配置数据源的实例名);

//Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
Statement sm= conn.createStatement();

//获取执行SQL语句
ResultSet rs=sm.executeQuery("select * from emp");
   
2. Jdbc连接方式
  //加载驱动
          Class.forName("oracle.jdbc.driver.OracleDriver");
         
          //获取链接
          Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.15:1521:TEST","testUser","testUser");
         
         //Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
          Statement sm=conn.createStatement();
         
          //获取执行SQL语句
ResultSet rs=sm.executeQuery("select * from emp");

 进行分页

 <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'MyTestOracl.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
    <table>
    <tr><td>姓名</td><td>工资</td></tr>
    <%
          //加载驱动
          Class.forName("oracle.jdbc.driver.OracleDriver");
         
          //获取链接
          Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.15:1521:TEST","testUser","testUser");
         
         //Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句
          Statement sm=conn.createStatement();
         
          //接受pageNow
          int pageNow = 1;
         
          String s_pageNow = (String)request.getParameter("pageNow");
         
          if(s_pageNow != null)
          {
                 pageNow = Integer.parseInt(s_pageNow);
          }
         
          //总页数
          int pageCount = 0;
         
          //每页显示的行数
          int pageSize = 3;
         
          //总行数
          int rowSize = 0;
         
          //获取执行SQL语句
          ResultSet rs = sm.executeQuery("select count(*) from emp");
         
          if(rs.next())
          {
                  //获取总行数
                  rowSize = rs.getInt(1);
                 
                  //计算总页数
               /*   if(rowSize%pageSize == 0)
                  {
                       pageCount = rowSize/pageSize;
                  }
                  else
                  {
                      pageCount = rowSize/pageSize+1;
                  }*/
                 pageCount = (rowSize%pageSize==0) ? rowSize/pageSize : rowSize/pageSize+1;
          }
         
          ResultSet rs1=sm.executeQuery("select * from (select  a1.*,rownum rn from(select * from emp) a1 where rownum<="+pageNow*pageSize+") where rn>="+((pageNow-1)*pageSize+1)+" ");
         
          while(rs1.next())
          {
                out.println("<tr>");
                out.println("<td>"+rs1.getString(2)+"</td>");
                out.println("<td>"+rs1.getString(6)+"</td>");
                out.println("</tr>");
          }
         
          for(int i=1; i<=pageCount; i++)
          {
                 out.print("<a href=MyTestOracl.jsp?pageNow="+i+">["+i+"]</a>");
          }
   
     %>
    </table>
  </body>
</html>


17.子查询修改数据
 To_date 函数
使用to_date函数-> update tablename set rowdate = to_date('03-26-2013','mm-dd-yyyy') where (条件); (注,实际年月日要与年月日样式保持一致,如(’2013-03-23’,’yyyy-mm-dd’))
 使用子查询插入数据时,一条insert语句可以大量数据;
 insert into tablename1(row1,row2) select row1,row2 from tablename2 where (条件);
 使用子查询修改数据时,一条update语句可同时修多条语句
 Update tablename set (row1,row2,…)=(select row1,row2,…from [条件]) where [条件]
18.oracle中事务处理
 什么是事务?
事务就是用于保证数据的一致性,它由一组相关的dml语句组成,改组的dml语句要么全部成功,要么全部失败;(dml语句就是数据操作语言,如查询,删除等等);
 事务和锁
当执行事务操作时(dml语句),oracle会在被操作的表上加锁,防止其他用户改变表的结构;
 提交事务
当执行使用commit语句会提交事务,当执行了commit事务,会确认事务的变化,结束事务,删除保存点,释放锁。当使用commit提交事务后,其他会话可以看到事务确认变化的新数据;
 保存点
保存点是事务中的一个点,用于取消部分事务,当事务结束时,会自动删除该事务所定义的所有保存点。
 回滚事务
当执行rollback时,通过制定保存点可以回退到制定的点;(注:当事务执行commit提交了以后,不能再回滚了)。
 事务的几个重要操作
1) 设置保存点
Savepoint  a1;
2) 取消部分事务
Rollback to a1;
3) 取消全部事务
Rollback;
4) 提交事务
Commit;
 Java中如何使用事务
在java中操作数据时,为了保证数据库的一致性,比如转账操作;

import java.sql.*;

public class testOra2 {

 //演示jdbc链接操作oracle
 
 public static void main(String[] args) {
  
  Connection conn=null;
  try
  {
   //1.加载jdbc驱动
   
   Class.forName("oracle.jdbc.driver.OracleDriver");
   
   //2. 获取链接
   conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.10.15:1521:TEST","testUser","testUser");
   
   //下面操作和sql server一样
   Statement sm=conn.createStatement();
   
   //加载事务处理
   conn.setAutoCommit(false);
   
    sm.executeUpdate("update emp set sal=sal-100 where ename='KING'");
   
    //设置异常
   int i=7/0;
   
    sm.executeUpdate("update emp set sal=sal+100 where ename='SCOTT'");
   
    //提交事务处理
    conn.commit();
   //关闭资源
   conn.close();
   sm.close();
   
  }
  catch(Exception ex)
  {
   try
   {
    //事务回滚
    conn.rollback();
   }
   catch (Exception e)
   {
        e.printStackTrace();
   }
   
   ex.printStackTrace();
   
  }
 

 }

}


 只读事务
只读事务就是只允许执行查询操作,不允许执行其他任何dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。
设置只读事务
Set transaction read only;

 

 

 


19 oracle -sql函数的使用(字符函数)
Lower(char)将字符串转化为小写格式;
Upper(char)将字符串转化为大写格式;
Length(char)返回字符串的长度;
Substr(char,m,n)(注:m表示截取字符串的起始位置,n表示截取的长度)去字符串的子串;
 典型案例:
以首字母大写其余字母小写显示某一列 -> select upper(substr(row,1,1))||lower(substr(row,2,length(row)-1)) from tablename;
Replace(char1,search_string,replace_string)替换,search_string表示需要被替换的字符串,replace_string表示替换的字符串;
Instr(char1,char2,[,n[,m]])取字串在字符串中的位置;

20. oracle -sql函数的使用(数学函数)
数学函数输入的参数和返回值的数据类型都是数字类型,数学函数包括cos,cosh,exp,ln,log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round,我们讲常用的:
 round(n,[m]) 该函数用于执行四舍五入,如果省略m则四舍五入到整数位,如果m为整数,则截取到小数点m位后,如果m为负数,则截取到小数点的前m位;
 trunc(n,[m]) 该函数用于截取数字,如果省略掉m,就截去小数点部分,如果m是正数就截取小数点m位后,如果m为负数就截取小数点的前m位;
 mod(n,m) 该函数取n模m ,类似于n除以m的余数,例:select mod(13,2) from dual;(注:dual是一个虚拟表)
 floor(n) 返回小于或等于n的最大整数;
 ceil(n) 返回大于或等于n的最大整数;

其他的数学函数:
 abs(n) 返回数值n的绝对值;
 acos(n) 返回n的反余弦值;
 asins(n) 返回n的反正弦值;
 atan(n) 返回 n的方正切值;
 exp(n) 返回e的n次幂;
 log(n,m) 返回对数值;
 power(n,m) 返回m的n次幂;

21. oracle -sql函数的使用(日期函数)
日期函数用于处理date类型的数据:
 sysdate该函数返回系统时间
 select sysdate from dual;
 add_months(row,months) 增加约数
 select add_months(row,10) from tablename;
 last_day(rowdate) 指定日期所在月份的最后一天:
 select last_day(rowdate) from tablename;
 To_date 函数
使用to_date函数-> update tablename set rowdate = to_date('03-26-2013','mm-dd-yyyy') where (条件); (注,实际年月日要与年月日样式保持一致,如(’2013-03-23’,’yyyy-mm-dd’))
22. oracle -sql函数的使用(转换函数)
 
 select to_char(rowdate,’$99,999.99’) from tablename;
 select to_char(sal,’yyyy-mm-dd hh24:mi:ss’) from tablename;
 select to_char(sal,’yyyy’) from tablename;

 

 

23. oracle -sql函数的使用(系统函数)
 sys_context
 terminal:当前会话客户所对应的终端标示符;
select sys_context(‘userenv’,’terminal’) from dual;
 language:返回当前操作的语言:
select sys_context(‘userenv’,’language’) from dual;
 db_name:当前数据库名称
select sys_context(‘userenv’,’db_name’) from dual;
 nls_date_format:当前会话客户所对应的日期格式:
select sys_context(‘userenv’,’nls_date_format’) from dual;
 session_user:当前会话客户所对应的数据库用户名:
select sys_context(‘userenv’,’session_user’) from dual;
 current_schema:当前会话客户所对应的默认方案名:
select sys_context(‘userenv’,’ current_schema’) from dual;
 host:返回数据库所在的主机名:
select sys_context(‘userenv’,’ host’) from dual;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle是一种关系型数据库管理系统,广泛用于企业级应用程序中。学习Oracle需要全面了解其结构、基本概念和操作技巧。 首先,了解Oracle数据库的体系结构非常重要。Oracle数据库由实例和数据库组成。实例是数据库在内存中的运行实体,数据库是磁盘上存储数据的地方。了解实例和数据库之间的关系以及它们各自的功能对于后续学习非常重要。 其次,掌握SQL语言对于学习Oracle至关重要。SQL是结构化查询语言的缩写,用于与数据库进行交互。学习SQL语言,包括基本的SELECT、INSERT、UPDATE和DELETE语句,以及高级的聚合函数、连接查询和子查询等操作,可以帮助我们有效地访问和操作Oracle数据库。 此外,熟悉Oracle数据库的基本概念也是学习的关键。如表、视图、索引、约束、触发器等一系列数据库对象的使用和管理,以及事务的概念和ACID特性的重要性等。 了解Oracle的性能调优也是学习Oracle的必备知识之一。通过优化查询、索引和存储结构等手段来提高数据库的性能可以使数据库系统更加高效地运行。 最后,了解Oracle的高级特性和功能也是学习的重点。如分区表、数据泵、分布式数据库、备份和恢复等高级功能,在复杂的企业级环境中能够更好地应对各种需求。 总之,学习Oracle需要综合掌握数据库的结构、SQL语言、基本概念、性能调优和高级特性等。通过理论学习和实践操作相结合,逐步积累经验,才能够成为熟练的Oracle数据库管理员或开发人员。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值