安装卸载和基本使用

Oracle

一、课程目标

【了解】Oracle基本概念
【理解】Oracle的安装与卸载
【掌握】Oracle的基本使用

二、概述

ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。但它的所有知识,只要在一种机型上学习了ORACLE知识,便能在各种类型的机器上使用它。

2.1 Oracle发展史

•1978年,Oracle 2诞生了,它是使用汇编语言开发的,但它的出现并没有引起太多的关注

•1982年,Oracle公司推出了Oracle 3,这是第一个能够运行在大型和小型机上的关系型数据库

•1997年, Oracle公司又推出了基于Java语言的Oracle 8

•1999年,Oracle正式提供世界上第一个Internet数据库Oracle8i

•2001年6月,Oracle公司发布了Oracle 9i

•2007年7月12日,Oracle公司推出Oracle 11g,Oracle 11g中的“g”代表“网络”

2.2 Oracle 数据库系统的特点

•支持大数据库、多用户、高性能的事务处理

•安全性好

•提供了新的分布式数据库能力

•具有可移植性、可兼容性

2.3 Oracle数据库存储结构

在这里插入图片描述

数据块(Data Block)

数据块是最小的数据管理单位,即Oracle中所有的I/O操作都以块为单位。数据块的大小是操作系统块大小的整数倍,常见大小为2KB或4KB

数据区间(Data Extent)

数据区间由物理上连续存放的块所构成,它是Oracle存储分配的最小单位,一个或多个块组成一个数据区间

数据段(Data Segment)

若干个数据区间构成数据段

表空间(Table Space)

为了提高数据库服务器管理和运行的效率,Oracle 11g使用“表空间”这个虚拟的概念来管理逻辑对象,用户可以将不同性质的逻辑对象存放在不同的表空间下
在Windows操作系统中,使用文件夹来分类管理各种文件,表空间相当于Oracle数据库的文件夹。

每个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系

账号、表空间、表之间的关系

一个账号可以拥有多个表空间的使用权限,一个表空间可以存储多个表,一个表只能属于一个表空间

三、Oracle的卸载与安装

3.1 Oracle的卸载

1)关闭正在运行的Oracle所有服务

在这里插入图片描述

2)删除对应注册表信息

删除oracle注册表信息.运行regedit,删除注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle

删除oracle服务.oracle服务在注册表中的位置是:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service
删除所有以oracle字符打头的服务.

删除事件日志.注册表中的位置是
HKEY_LOCAL_MACHINE\SYSTEM\CurrentContrilSet\Services\Eventlog\Application
删除所有以oracle字符打头的键.

3)删除环境变量中oracle的环境变量

删除ORACLE环境变量,如"JSERV"变量和Path变量中的oracle路径

4)删除oracle相关菜单以及目录

  1. 删除oracle菜单.
  2. 删除"program files\oracle"目录
  3. 重启WINDOWS.
  4. 删除oracle主目录.

3.2 Oracle的安装

1)将安装包解压到指定文件(如果是官网下载的安装包,那么需要将两个压缩文件解压到一起)

下面截图中没有的步骤截图就直接下一步就可以

在这里插入图片描述

2)点击setup.exe进行安装

在这里插入图片描述

3)根据提示完成oracle的配置与安装

取消勾选安全更新提示

在这里插入图片描述

选择安装服务器类应用

在这里插入图片描述

选择高级安装进行详细配置

在这里插入图片描述

选择oracle管理软件安装位置,之后的详细位置会自动生成

在这里插入图片描述

修改数据库存储数据默认字符集

在这里插入图片描述

为默认账号设置密码口令(可以设置统一也可以分别设置)

在这里插入图片描述

4)解锁账号修改密码

默认很多账号都是锁定状态不能使用,需要解锁后才能使用

在这里插入图片描述

5)使用 sqlplus测试是否可以连接数据库

在这里插入图片描述

用户输入 sys as sysdba 输入密码

在这里插入图片描述

3.3 PLSQL Developer图形化工具安装

1)解压到指定文件夹

在这里插入图片描述

2)配置连接当前oracle数据的配置

进入指定文件夹修改.ora文件

在这里插入图片描述

将ip修改为oracle数据库所在ip
在DOS命令中输入ipconfig查看本机IP

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.50.6.110 )(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

四、Oracle的基本使用

4.1 DCL语句

4.1.1 表空间的创建

表空间的作用

可以使用表空间限制数据库文件的大小
利用表空间将数据文件存放到不同的磁盘上,提高IO性能,利于数据的备份和恢复
创建表空间语法:
CREATE TABLESPACE tablespacename
DATAFILE ‘filename’ [SIZE integer [K|M]]
[AUTOEXTEND [OFF|ON]];

create tablespace myspace
datafile 
  'e:/my01.dbf' size 5 M,
  'd:/my02.dbf' size 10 M
-- 创建表时,为表指定表空间
 create table person
 (
    pid number ,
    pname varchar2(20) ,
    page number(3),
    birthday date,
    address varchar2(20) default '不详'
 )tablespace myspace;

4.1.2 账号的创建

同一数据库中可以同时有多个用户,每个用户管理自己的数据库对象.比如数据库表、索引、视图等。。
Oracle中的CREATE USER命令用于创建新用户。每个用户都有一个默认表空间和一个临时表空间。如果没有指定,Oracle就将SYSTEM设为默认表空间,将TEMP设为临时表空间。

CREATE USER ahx
IDENTIFIED BY 123456
DEFAULT TABLESPACE myspace;

新创建的账号默认为锁定状态并且没有连接权限,需要解锁并授权

将指定用户解锁
alter user ahx account unlock;

4.1.3 角色权限认证

Oracle中的常用系统预定义角色如下。

CONNECT:临时用户,特别是那些不需要创建表的用户,通常赋予该角色。
RESOURCE:更为可靠和正式的数据库用户可以授予该角色,可以创建表、触发器、过程等。
DBA:数据库管理员角色,拥有管理数据库的最高权限。一个具有DBA角色的用户可以撤销任何别的用户甚至别的DBA权限,这是很危险的,所以不要把该角色轻易授予一些不是很重要的用户。
给用户分配权限或角色

GRANT命令用于为用户分配权限或角色,而REVOKE命令用于为用户撤销权限和角色

授权

分配权限或角色语法:GRANT [<权限> | <角色>] TO <用户>;
将指定用户授权
grant connect,dba,resource to ahx
grant create session,create table to ahx;--为用户分配权限
grant connect to ahx;--为用户分配角色
grant resource to ahx;
--grant connect,resource to ahx;--为用户分配角色

--为ahx分配查询scott账号下的emp表的权限
 -- grant select|insert|update|delete on 表 to 用户
 grant select on scott.emp to ahx
 --以xiaoming账号登录查询
 select * from scott.emp

在进行权限赋权时可以为指定账号单独赋予权限,也可以赋予角色,直接拥有角色所拥有的权限

取消授权

撤销权限和角色语法:REVOKE [<权限> | <角色>] FROM <用户>;

4.2 DDL语句

由于oracle没有库的概念,所以创建表空间就是建库语句,oracle的ddl语句经常指的是创建表或对表的列进行修改的语句

4.2.1 CREATE TABLE 语句

除数据类型外与mysql建表语句语法相同,并且oracle允许检查约束(一般交由服务器处理)

---创建表: create table 表名(列名1 数据类型 [约束])
create table dept
(
   deptno number(6) primary key,
   deptname varchar2(50) not null,
   deptnum  number(5)  check (deptnum>=0),
   loc varchar(100) default '郑州' 
)

create table employee
(
   empId number(10) primary key,
   empName varchar2(50) not null,
   empAge number(3) check(empAge>=18 and empAge<=60),
   deptno number(6) references dept(deptno)
)

Oracle没有主键自增的概念,如果需要主键自增可以通过序列解决

4.2.2 ALTER TABLE语句

对已有表的列进行操作

增加

语法: alter table tableName add columnName dataType;

alter table employee add empTel varchar2(11);

修改

语法: alter table tableName modify columnName dataType;

alter table employee modify empTel varchar2(14);

删除

语法: alter table tableName drop column columnName;

alter table employee drop column empTel;

对列添加约束

语法:alter table tableName add constraint constraintName constraintType(columnName)

alter table dept add constraint un_deptname unique(deptname);

从视图USER_CONS_COLUMNS中查看约束

select constraint_name,column_name from user_cons_columns

4.2.3 序列

序列(SEQUENCE)是一个命名的顺序编号生成器,它能以串行的方式生成一系列顺序整数

序列的主要用途:

  • 主键、外键值应用需求
  • 流水号应用需求
  • 序列的生成与定义的内容

序列语法:

CREATE SEQUENCE sequnce_name
[START WITH n1] //指定要生成的第一个序列号 (从n1 开始)
[INCREMENT BY n2] //用于指定序列号之间的间隔,默认值为1
[{MAXVALUE n3 | NOMAXVALUE}] //指定序列可以生成的最大值
[{MINVALUE n4 | NOMINVALUE}] //指定序列可以生成的最小值
[{CACHE n5 | NOCACHE}] //用于指定在高速缓存中可以预分配的序列号个数,默认为20
[{CYCLE | NOCYCLE}] //用于指定在达到序列的最大值或最小值后是否循环
[ORDER]; //用于指定按顺序生成序列号 ,确保序列唯一和有序

create sequence ms
   start with 1
   increment by 1
   maxvalue 5
   minvalue 1
   nocycle
   cache 10;

使用

通过nextval获取下一个序列的值

select ms.nextval from dual;

通过currval获取当前序列的值

select ms.currval from dual;

序列的使用

--创建序列
create sequence ms
start with 1  --从1开始
increment by 1 --序列的间隔(每次变化的数值)
maxvalue 10000000 --最大值
minvalue 1   --最小值
nocycle --不循环
cache 10 

 select * from dual
 select my_seq.nextval from dual
 select my_seq.currval from dual
   
 select * from employee
   --Oracle中没有主键自增的概念,但可以通过自定义序列来实现
   insert into employee(empId,empName,empAge,deptno) values(ms.nextval,'zhangsan',20,10)

修改序列

#更改序列
ALTER SEQUENCE ms MAXVALUE 5000 CYCLE;
#删除序列
DROP SEQUENCE ms;

4.3 DML语句

oracle基本语句使用的还是sql所以与mysql学习时使用的dml语句基本保持一致

4.3.1 insert 增加

insert into 表名(列名1,列名2,列名3)values(1,2 ,3)

由于没有主键自增所以在添加时使用序列进行数据的id生成

4.3.2 update 修改

update 表名 set 列名1=1, 列名2=2[where 条件]

4.3.3 delete删除

delete from 表名 [where 条件]

基本查询语句练习

--使用scott账号练习基本查询语句
--1 查询当前用户下的所有表
select * from tab;
--2 查询雇员表中所有信息
select * from emp;
--3 查询雇员编号,姓名,工作,工资
select empno,ename,job,sal from emp
--4 查询雇员编号,姓名,工作,工资,并显示中文(为列起别名)
select empno as 编号,ename as 姓名,job as 工作,sal as 工资 from emp
--5 消除重复列,查询雇员工作种类
select distinct job from emp
--6 字符串连接操作(||)
--查询雇员编号,姓名,工作.按以下格工显示:编号:7369,姓名:Smith,工作:Clerk
select '编号:'||empno,'姓名:'||ename,'工作:'||job from emp
--7 查询列支持四则运算(年薪=(工资+奖金)*12)
--查询雇员编号,姓名,工作,年薪 
select empno,ename,job,(sal+nvl(comm,0))*12 from emp
nvl(comm,0)==>如果comm值为空,取值0

--8 Where条件查询
-- 查询工资大于1500的所有雇员
select * from emp where sal>1500
--查询可以得到奖金的所有雇员
select * from emp where comm is not null
--查询工资大于1500或可以得到奖金的雇员
select * from emp where sal>1500 or comm is not null
--查询工资大于1500并且可以领取奖金的雇员
select * from emp where sal>1500 and comm is not null
--查询工资不大于1500或者不可以领取奖金的雇员
select * from emp where sal<=1500 or comm is null
--查询工资在1500到3000的所有雇员信息
select * from emp where sal>=1500 and sal<=3000
select * from emp where sal between 1500 and 3000
--查询在1981年雇用的员工信息
select * from emp where hiredate like '%81%'
--查询雇员姓名中第二个字母为"M"的雇员
select * from emp where ename like '_M%'
--查询雇员工资中带8这个数字的
select * from emp where sal like '%8%'
--查询编号是7369,7499,7521,7799的雇员信息
select * from emp where empno=7369 or empno=7499 or empno=7521 or empno=7799
select * from emp where empno in(7369,7499,7521,7799)
--查询雇员编号不是7369,7499,7521,7799的所有雇员信息
select * from emp where empno not in(7369,7499,7521,7799)
--查询雇员编号为7369的雇员信息
select * from emp where empno =7369
--查询雇员编号不为7369的雇员信息
select * from emp where empno !=7369
select * from emp where empno <>7369

--查询雇员信息,按工资由低到高排序
select * from emp order by sal asc
--查询雇员信息,按工资由高到低排序
select * from emp order by sal desc

--操作集合:
--union:将两个记录合并,去掉重复项 
select distinct deptno from emp union select deptno from dept;
--union:将两个记录合并,不去掉重复项 
select distinct deptno from emp union all select deptno from dept;
--intersect:取两个集合的交集
select distinct deptno from emp intersect select deptno from dept;
--minus:去掉交集(集合A-(集合A和集合B的交集))
select deptno from dept minus select distinct deptno from emp ;

猜你喜欢

转载自blog.csdn.net/qq_53449032/article/details/115298607