一、install

00_安装与配置Oracle11g32位数据库服务器.JPG

image.png

image.png
image.png

image.png

image.png

image.png

image.png
image.png

二、uninstall

windows 安装oracle后大概有7个服务:
image.png

oracleServiceORCL,与数据库名字有关,核心服务,启动大约2分钟,可以设置为手动启动。关系整个oracle服务的运行
oracleOraDb11g_home1TNSListener:oracle支持的远程访问,启动要1-2秒

卸载:

用Oracle自带的卸载程序不能从根本上卸载Oracle,从而为下次的安装留下隐患,那么怎么才能完全卸载Oracle呢? 那就是直接注册表清除,步骤如下:
1、 开始->设置->控制面板->管理工具->服务
停止所有Oracle服务。
2、 开始->程序->Oracle - OraDb11g_home1->Oracle安装产品-> Universal Installer
卸装所有Oracle产品,但Universal Installer本身不能被删除[如果第二步执行失败,跳到第三步,大部份第二步是失败的]
3、 运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。
4、 运行regedit,删除以下这三个位置中的所有Oracle入口。 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\【下】所有Oracle删除 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\【下】所有Oracle删除 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\【下】所有Oracle删除 5、 运行regedit,
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\【下】所有Oracle删除,
删除所有Oracle入口。

6、 开始->设置->控制面板->系统->高级->环境变量

删除环境变量CLASSPATH和PATH中有关Oracle的设定

7、 从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标

8、 删除e:/oracleDB目录

9、 【重新启动计算机】,重起后才能完全删除Oracle所在目录

10、 删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入

  1. 口目录及所有子目录,并从Windows目录(一般为C:\WINDOWS)下删除oralce文件等等。

11、 在运行框中输入“win.ini”,回车。WIN.INI文件中若有[ORACLE]的标记段,删除该段

12、 【如有必要】,删除所有Oracle相关的ODBC的DSN

13、 到事件查看器中,删除Oracle相关的日志

说明:

如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,

安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了

三、解锁与设置普通用户

1.实例和数据库

oracle服务器包含 实例和数据库,实例是看不见的,数据库是看得见的。
实例操作数据库,如select,update,delete,insert

数据库是看得见的,在安装目录中可以看到:
image.png

oracle ,一个数据库对应一个目录,有多少个数据库,就有多少个目录
image.png

2.oracle服务器与orcl数据库的关系

一个oracle数据库服务器中包括多个数据库,例如:orcl,orm,oa,bbs,tax,erp等等。在E:\oracleDB\oradata\目录下,有多少个文件夹,就有多少个数据库,例如:orcl文件夹=orcl数据库。我们向数据库中存储的所有数据库,最终都会存放在对应库的*.DBF文件中,以二进制压缩形式存放  <br />    <br />    注意:我们在安装oracle时,已经创建好了一个数据库,默认名叫orcl,除非你当时改了数据库名字  

3.登录

登录oracleyo有两种方式,用户名角色用户名密码
**
此处以用户名角色登录:
在cmd 中输入 sqlplus / as sysdba
(sys是用户名,dba是角色)

sqlplus ,客户端连接oracle服务器的工具

sqlplus连接成功
image.png

4.解锁、改密码

oracle安装好后,会有一个超级管理员,用户名:sys ,角色:dba ,就是上面登录时候用到的。

另外还有普通用户,HR、scott 等,但是默认的这些用户是未解锁的,使用的时候需要解锁。

以sys超级用户名,dba角色,即超级管理员身份解锁scott方案/用户,并为scott设置一个密码为tiger

  • 连接 sqlplus / as sysdba
  • 解锁用户:alter user scott account unlock;
  • 设置密码:alter user scott identified by tiger;
  • exit , 然后 sqlplus scott/tiger 登录成功
  • 普通用户scott 密码tiger
  • 用户名、密码三次错误,拒绝登录

如果密码忘了,如何改密码:

  • sqlplus / as sysdab
  • alter user scott identified by 123456;

另外,登录的时候,也可以这样,避免密码直接暴露
image.png

或直接打开 SQL Plus
image.png

5.普通用户自己改密码

image.png

四、oracleSQL和oracle的关系

SQL92/【99】标准的四大分类
(A)DML(数据操纵语言):select,insert,update,delete
(B)DDL(数据定义语言):create table,alter table,drop table,truncate table 。。。
(C)DCL(数据控制语言):grant 权限 to scott,revoke 权限 from scott 。。。
(D)TCL(事务控制语言):commit,rollback,rollback to savepoint 。。。

oracleSQL与SQL92/99的关系
SQL92/99标准,访问任何关系型数据库的标准
oracleSQL语言,只访问Oracle数据库服务器的专用语言

Java技术和oracleSQL的关系
JDBC—>使用OracleSQL语法—>Oracle服务器—->orcl数据库—>表—>记录
Hibernate—>使用OracleSQL语法—>Oracle服务器
MyBatis—>使用OracleSQL语法—>Oracle服务器

五、SQL Plus 各种

1. select等各种命令

使用password命令,为scott用户名修改新密码,以字母开头,但提倡使用tiger
password
旧口令:tiger
新口令:abc123
再次输入新口令:abc123

退出sqlplus工具
exit

查询当前用户是谁
show user;

查询scott用户下的所有对象,使用tab表,tab表每个用户都有
select * from tab;

设置显示的列宽(字符型varchar2、日期型date),10个宽度位,a表示字符型,大小写均可
column ename format a12;
column hiredate format a10;

设置显示的列宽(数值型number),9表示数字型,一个9表示一个数字位,四个9表示四个数字位,只能用9
column empno format 9999;
column mgr format 9999;
column sal format 9999;
column comm format 9999;
column deptno format 9999;

设置一页显示80个条记录的高度
set pagesize 80;

使用/杠,执行最近一次的SQL语句
/

清屏,属于SQL*PLUS工具中的命令
host cls;

查询emp表的结构
desc emp;

查询emp表的所有内容,号表示通配符,表示该表中的所有字段,但号不能和具体字段一起使用
select * from emp;

select empno,ename,sal,deptno from emp;

查询emp表的员工编号,姓名,工资,部门号,列名,大小写不敏感,但提倡大写
select empno “编号”,ename “姓名”,sal “工资”,deptNO “部门号” FROM Emp;

查询emp表的不重复的工作
select distinct job from emp;

查询员工的编号,姓名,月薪,年薪(月薪12)
select empno,ename,sal,sal
12 “年薪” from emp;

查询员工的编号,姓名,入职时间,月薪,年薪,年收入(年薪+奖金)
select empno “编号”,ename”姓名”,hiredate “入职时间”,sal “月薪”,sal_12 “年薪”,sal_12+comm “年收入” from emp;
如果结果为null,在sqlplus客户端工具中,是不显示null这个值的

解决null的问题,使用NVL()函数,NVL(a,b):如果a是NULL,用b替代;如果a是非NULL,就不用b替代,直接返回a的值
select NVL(null,10) from emp;结果有14行记录
select NVL(null,10) from dual;结果有1行记录
select empno “编号”,ename”姓名”,hiredate “入职时间”,sal “月薪”,sal_12 “年薪”,sal_12+NVL(comm,0) “年收入”
from emp;
注意:null与具体数字运算时,结果为null

使用列别名,查询员工的编号,姓名,月薪,年薪,年收入(年薪+奖金),AS大小写都可且可以省略AS,别名用双引号
select empno AS “编号”,ename as “姓名”,sal “月薪”
from emp;

select empno AS 编号,ename as 姓名,sal 月薪
from emp;
区别
select empno AS “编号”,ename as 姓名,sal “月 薪”
from emp;
不加双引号的别名不能有空格;加了双引号的别名可以有空格
要加只能加双引号,不能加单引号,因为在oracle中单引号表示字符串类型或者是日期类型
列名不能使用单引号,因为oracle认为单引号是字符串型或日期型

使用dual哑表或者伪表,使用字符串连接符号||,输出”hello world”,在oracle中from是必须写的
select ‘hello’ || ‘ world’ “结果” from dual;

使用sysdate,显示系统当前时间,在默认情况下,oracle只显示日期,而不显示时间,格式:26-4月-15
select sysdate from dual;

使用字符串连接符号||,显示如下格式信息:的薪水是美元
select ename || ‘的薪水是’ || sal || ‘美元’
from emp;

使用spool命令,保存SQL语句到硬盘文件e:/oracle-day01.sql,并创建sql文件
spool e:/oracle-day01.sql;

使用spool off命令,保存SQL语句到硬盘文件e:/oracle-day01.sql,并创建sql文件,结束语句
spool off;

使用@命令,将硬盘文件e:/crm.sql,读到orcl实例中,并执行文件中的sql语句
@ e:/crm.sql;

使用—符号,设置单行注释
—select * from emp;

使用/ /符号,设置多行注释
/
select

from
emp;
*/

SQL语句的特点
1)是SQL92/99的ANSI官方标准,只要按照该标准来写,在任何的关系型数据库中都可以直接执行
2)SQL语句的关健字不能简写,例如:select,where,from
3)大小写不敏感,提倡大写
4)能够对表数据进行增删改查操作
5)必须以分号结束
6)通常称做语句

SQLPLUS命令的特点
1)是oracle自带的一款工具,在该工具中执行的命令叫SQLPLUS命令
2)SQLPLUS工具的命令中的关健字可以简写,也可以不简写,例如:col ename for a10;
3)大小写不敏感,提倡大写
4)不能够对表数据进行增删改查操作,只能完成显示格式控制,例如:设置显示列宽,清屏,记录执行结果
5)可以不用分号结束,也可以用分号结束,个人提倡不管SQL或SQLPLUS,都以分号结束
6)通常称做命令,是SQLPLUS工具中的命令
注意:SQLPLUS命令是SQLPLUS工具中特有的语句

单引号出现的地方如下:
1)字符串型,例如:’hello’ || ‘ world’
2)日期型,例如’25-4月-15’

双引号出现的地方如下:
1)列别名,例如:sal_12 “年 薪”,或 sal_12 年薪,个人提倡用””双引号作列别名

2. where,order by等

转义符
查询员工姓名中含有’‘的员工,使用\转义符,让其后的字符回归本来意思【like ‘%\%’ escape ‘\’】
select * from emp where ename like ‘%_%’ escape ‘\’;

order by
查询员工信息(编号,姓名,月薪,年薪),按月薪升序排序,默认升序,如果月薪相同,按oracle内置的校验规则排序
select empno,ename,sal,sal12
from emp
order by sal asc;
查询员工信息(编号,姓名,月薪,年薪),按月薪降序排序
select empno,ename,sal,sal
12
from emp
order by sal desc;
查询员工信息,按入职日期降序排序,使用列名
select empno,ename,sal,hiredate,sal*12 “年薪”
from emp
order by hiredate desc;

order by后面可以跟列名、别名、表达式、列号(从1开始,在select子句中的列号)
列名:
select empno,ename,sal,hiredate,sal*12 “年薪”
from emp
order by hiredate desc;

别名:
select empno,ename,sal,hiredate,sal*12 “年薪”
from emp
order by “年薪” desc;

表达式:
select empno,ename,sal,hiredate,sal12 “年薪”
from emp
order by sal
12 desc;

列号,从1开始
select empno,ename,sal,hiredate,sal*12 “年薪”
from emp
order by 5 desc;
第5个,就是年薪,其实就是按年薪排序的

查询员工信息,按佣金升序或降序排列,null排序的时候是作为最大值的
select * from emp order by comm desc;

3. nvl,nullif,decode

NVL()
使用NVL(a,b)通用函数,统计员工年收入,NVL()作用于任何类型,即(number/varchar2/date)
通用函数:参数类型可以是number或varchar2或date类型
select ename,sal*12+NVL(comm,0) from emp;

NVL2(a,b,c)
使用NVL2(a,b,c)通用函数,如果a不为NULL,取b值,否则取c值,统计员工年收入
select ename,sal*12+NVL2(comm,comm,0) from emp;

NULLIF(a,b)
使用NULLIF(a,b)通用函数,在类型一致的情况下,如果a与b相同,返回NULL,否则返回a,比较10和10.0是否相同
select NULLIF(10,’10’) from dual;

case when
使用SQL99标准通用语法中的case表达式,将职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400
case 字段
when 条件1 then 表达式1
when 条件2 then 表达式2
else 表达式n
end

select ename “姓名”,job “职位”,sal “涨前工资”,
case job
when ‘ANALYST’ then sal+1000
when ‘MANAGER’ then sal+800
else sal+400
end “涨后工资”
from emp;

decode()
使用oracle专用语法中的decode()函数,职位是分析员的,工资+1000;职位是经理的,工资+800;职位是其它的,工资+400
decode(字段,条件1,表达式1,条件2,表达式2,…表达式n)
select ename “姓名”,job “职位”,sal “涨前工资”,
decode(job,’ANALYST’,sal+1000,’MANAGER’,sal+800,sal+400) “涨后工资”
from emp;

4. 删除表后恢复

MySQL创建表语句users(id整型/name字符串/birthday日期型,默认今天)
drop table if exists users;
create table if not exists users(
id int(5) auto_increment primary key,
name varchar(4) not null,
birthday date default ‘2015-4-27’
);

使用oracleSQL,创建用户表users(id整型/name字符串/birthday日期/sal整型,默认今天)
create table users(
id number(5) primary key,
name varchar2(8) not null unique,
sal number(6,2) not null,
birthday date default sysdate
);

进入回收站
drop table users;

查询回收站中的对象
show recyclebin;

闪回,即将回收站还原
flashback table 表名 to before drop;
flashback table 表名 to before drop rename to 新表名;

彻底删除users表
drop table users purge;
清空回收站
purge recyclebin;

如果flaseback 的时候,有两张一样名字的表,先进后出,会恢复最后删除的那张表。
也可通过 RECYCLEBIN NAME 来闪回
image.png