Oracle

Oracle数据库安装

imagepng

数据库的类型

imagepng

一、数据库版本说明

1998年Oracle8i:i指internet,表示oracle向互联网发展,8i之前数据库只能对应1个实例
2001年Oracle9i:8i的升级,性能更佳,管理更人性化
2003年Oracle10g:g指grid,表示采用网格计算的方式进行操作,性能更好
2007年Oracle11g:10g的稳定版本,目前公司里面最常用
2013年Oracle12c:c指cloud,表示云计算,支持大数据处理
2018年Oracle18c:部分工作自主完成,减少手动操作的工作量
2019年Oracle19c:是12c和18c的稳定版本

二、软件的下载和安装

1.下载软件

我们通过官方来下载11g,地址为:

Oracle Database 11g Release 2 for Microsoft Windows (x64)

imagepng

如果没有登录则需要先登录后才能下载。

账号:dengpbs@163.com 密码:Dpb2255613@

imagepng

下载下来后解压缩即可

imagepng

2.安装数据

解压缩后我们进入第一个目录中找到setup.exe。双击运行即可。

imagepng

然后按步骤安装即

imagepng

下一步

imagepng

imagepng

配置口令:统一123456

imagepng

imagepng

安装等待

imagepng

继续等待

imagepng

口令管理

imagepng

安装完成

imagepng

然后我们可以在系统 服务 中,查看启动运行的Oracle数据库

imagepng

Oracle 11g服务详细介绍及哪些服务是必须开启的?
安装oracle 11g R2中的方法成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为

  1. Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能。(非必须启动)
  2. OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。(非必须启动)
  3. OracleJobSchedulerORCL:Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须动)
  4. OracleMTSRecoveryService:服务端控制。该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动)
  5. OracleOraDb11g_home1ClrAgent:Oracle数据库.NET扩展服务的一部分。 (非必须启动)
  6. OracleOraDb11g_home1TNSListener:监听器服务,服务只有在数据库需要远程访问的时候才需要。(非必须启动,下面会有详细详解)。
  7. OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动)那么在开发的时候到底需要启动哪些服务呢?对新手来说,要是只用Oracle自带的sql*plus的话,只要启动OracleServiceORCL即可,要是使用PL/SQL Developer等第三方工具的话,OracleOraDb11g_home1TNSListener服务也要开启。OracleDBConsoleorcl是进入基于web的EM必须开启的,其余服务很少用。
    注:ORCL是数据库实例名,默认的数据库是ORCL,你可以创建其他的,即OracleService+数据库名

imagepng

服务管理:

1、所有的服务改成"手动"
2、启动两个

  1. 监听服务:OracleOraDb10g_home1TNSListener监听客户端的连接
  2. 数据库服务:OracleServiceORCL 命名规则:OracleService+实例名

3.创建数据库

正常安装数据库的时候会默认安装一个orcl数据库。我们也可以通过 Database Configuration Assistant 来创建新的数据库。操作如下:

imagepng

进入操作

imagepng

创建数据库

imagepng

imagepng

创建数据库的唯一标识SID

imagepng

imagepng

指定口令

imagepng

imagepng

下一步

imagepng

一直下一步。最后完成

imagepng

imagepng

imagepng

创建完成

imagepng

4.PLSQL

客户端工具下载:Oracle SQL Developer Downloads 21.4.3

imagepng

解压缩出来后运行

imagepng

打开后的主页

imagepng

建立连接

imagepng

录入相关的信息:

imagepng

添加测试。查看是否能够连接成功

imagepng

提示:状态:成功。说明我们连接正常了

imagepng

点开+我们就可以看到相关的数据库的信息了。

三、数据库的卸载

1.关闭相关服务

我们进入 service中,关闭所有和oracle相关的服务

imagepng

imagepng

2.卸载软件

在搜索中找到Universal Installer。双击开始卸载

imagepng

imagepng

选中要删除的Oracle产品,然后点击删除

imagepng

imagepng

在你安装的app文件夹里面找到deinstall.bat文件,然后双击

imagepng

双击后:出现指定要取消配置的所有单示例监听程序【LISTENER】:

imagepng

没有权限需要通过管理员打开

imagepng

然后再输入OCRL

imagepng

等待时间比较长。输入y继续操作

imagepng

继续

imagepng

到这一步再CMD里面的操作就完成了,等待CMD界面自动消失即可

imagepng

3.删除注册信息

然后我们进入注册表中删除oracle的相关注册信息。输入: regedit 进入

imagepng

删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 路径下的所有Oracle开始的服务名称

imagepng

删除:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application注册表的所有Oracle开头的所有文件

imagepng

删除:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 注册表

若环境变量中存在Oracle相关的设置,直接删除,没有就跳过这一步

删除E:\app目录下的所有文件,根据自己的安装目录来

删除C盘下C:\Program File 目录下的Oracle目录

再删除C盘下C:\用户\dpb这个Oracle文件

注:所删除过程中遇到java.exe程序正在运行,按CTRL+shift+esc进入任务管理器,结束这个任务。

删除干净后重启电脑即可。

四、用户和权限

Oracle中,一般不会轻易在一个服务器上创建多个数据库,在一个数据库中,不同的项目由不同的用户访问,每一个用户拥有自身创建的数据库对象,因此用户的概念在Oracle中非常重要。Oracle的用户可以用CREATE USER命令来创建。其语法是:

CREATE
USER 用户名 IDENTIFIED BY 口令 [ACCOUNT LOCK|UNLOCK]

说明:LOCK|UNLOCK创建用户时是否锁定,默认为锁定状态。锁定的用户无法正常的登录进行数据库操作。

案例:

CREATE USER dpb IDENTIFIED BY 123456 ACCOUNT UNLOCK;

imagepng

尽管用户成功创建,但是还不能正常的登录Oracle数据库系统,因为该用户还没有任何权限。如果用户能够正常登录,至少需要CREATE SESSION系统权限。

imagepng

Oracle用户对数据库管理或对象操作的权利,分为系统权限和数据库对象权限。系统权限比如:CREATE SESSION,CREATE TABLE等,拥有系统权限的用户,允许拥有相应的系统操作。数据库对象权限,比如对表中的数据进行增删改操作等,拥有数据库对象权限的用户可以对所拥有的对象进行对应的操作。

还有一个概念就是数据库角色(role),数据库角色就是若干个系统权限的集合。下面介绍几个常用角色:

  • CONNECT角色,主要应用在临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECT role。CONNECT是使用Oracle的简单权限,拥有CONNECT角色的用户,可以与服务器建立连接会话(session,客户端对服务器连接,称为会话)。
  • RESOURCE角色 更可靠和正式的数据库用户可以授予RESOURCE
    role。RESOURCE提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)等。
  • DBA角色,DBA role拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。用户SYSTEM拥有DBA角色。

一般情况下,一个普通的用户(如SCOTT),拥有CONNECT和RESOURCE两个角色即可进行常规的数据库开发工作。

可以把某个权限授予某个角色,可以把权限、角色授予某个用户。系统权限只能由DBA用户授权,对象权限由拥有该对象的用户授权,授权语法是:

GRANT 角色|权限 TO 用户(角色)

案例:

imagepng

之后就可以通过 dpb这个账号来正常的登录了

删除用户操作:

imagepng

其他操作:

//回收权限

REVOKE
角色|权限 FROM 用户(角色)

//修改用户的密码

ALTER USER 用户名 IDENTIFIED BY 新密码

//修改用户处于锁定(非锁定)状态

ALTER USER 用户名 ACCOUNT LOCK|UNLOCK

SQL操作和查询

一、SQL简介

SQL是结构化查询语言(Structured Query Language),专门用于数据存取、数据更新及数据库管理等操作。

imagepng

在Oracle开发中,客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,把执行的结果返回给客户端。Oracle SQL语句由如下命令组成:

imagepng

目前主流的数据库产品(比如:SQL Server、Oracle,MySQL)都支持标准的SQL语句。数据定义语言,表的增删改操作,数据的简单查询,事务的提交和回滚,权限的授权和撤销等,Oracle与MySQL在操作上基本一致。

二、数据类型讲解

Oracle数据库的核心是表,表中的列使用到的常见数据类型如下:

类型 含义
CHAR(length) 存储固定长度的字符串。参数length指定了长度,如果存储的字符串长度小于length,用空格填充。默认长度是1,最长不超过2000字节。
VARCHAR2(length) 存储可变长度的字符串。length指定了该字符串的最大长度。默认长度是1,最长不超过4000字符。
NUMBER(p,s) 既可以存储浮点数,也可以存储整数,p表示数字的最大位数(如果是小数包括整数部分和小数部分和小数点,p默认是38为),s是指小数位数。
DATE 存储日期和时间,存储纪元、4位年、月、日、时、分、秒,存储时间从公元前4712年1月1日到公元后4712年12月31日。
TIMESTAMP 不但存储日期的年月日,时分秒,以及秒后6位,同时包含时区。
CLOB 存储大的文本,比如存储非结构化的XML文档
BLOB 存储二进制对象,如图形、视频、声音等。

对应NUMBER类型的示例:

格式 输入的数字 实际的存储
NUMBER 1234.567 1234.567
NUMBER(6,2) 123.4567 123.46
NUMBER(4,2) 12345.67 输入的数字超过了所指定的精度,数据库不能存储

对于日期类型,可以使用sysdate内置函数可以获取当前的系统日期和时间,返回DATE类型,用systimestamp函数可以返回当前日期、时间和时区。

imagepng

Oracle的查询中,必须使用“select 列… from 表”的完整语法,当查询单行函数的时候,from后面使用DUAL表,dual表在系统中只有一行一列,该表在输出单行函数时为了select…from的语法完整性而使用。

三、创建表和约束

1.表结构

Oracle中的建表的语法

CREATE TABLE 表名(

字段名称 类型 约束,

字段名称 类型 约束,

字段名称 类型 约束

)

在数据库中的不区分大小写

建表和注释的相关案例

-- 创建一张用户表。用来存储用户信息
CREATE TABLE t_student(
   id  number(5) , -- 学生编号
   name varchar2(20) , -- 学生的姓名
   age number(2) , -- 学生的年龄
   address varchar2(100) -- 学生的地址
); -- SQL语句结束 我们添加一个 英文状态下的 ;

-- 给 table 添加注释:
COMMENT ON TABLE t_student is '学生表'; -- 给表添加注释
COMMENT ON COLUMN t_student.id is '学生编号' ; -- 给表中的字段添加注释
COMMENT ON COLUMN t_student.name is '学生姓名' ; 
COMMENT ON COLUMN t_student.age is '年龄' ;
COMMENT ON COLUMN t_student.address is '学生住址';

2. 更新表结构

我们创建一个表结构后可能需要对表做出修改调整

-- 对表结构的操作
-- 1.删除表
DROP TABLE t_student;
CREATE TABLE t_student(
   id  number(5) , -- 学生编号
   name varchar2(20) , -- 学生的姓名
   age number(2) , -- 学生的年龄
   address varchar2(100)  -- 学生的地址
); -- SQL语句结束 我们添加一个 英文状态下的 ;
-- 添加字段
ALTER TABLE t_student ADD gender char(3);
-- 修改字段类型
ALTER TABLE t_student MODIFY gender varchar2(3);
-- 修改字段名称
ALTER TABLE t_student RENAME COLUMN gender to sex;
-- 删除字段
ALTER TABLE t_student DROP COLUMN sex;

3.约束

1.非空约束 该字段的内容不允许为空

DROP TABLE t_student;
CREATE TABLE t_student(
    id number(5) , -- 学生编号
    name varchar2(20) not null, -- 学生的姓名
    age number(2) default 18, -- 学生的年龄
    address varchar2(100), -- 学生的地址
    gender char(3) default '男'
); -- SQL语句结束 我们添加一个 英文状态下的 ;

2.默认值:如果该列的值为null就会用默认值来填充
DROP TABLE t_student;
CREATE TABLE t_student(
id number(5) , – 学生编号
name varchar2(20) not null, – 学生的姓名
age number(2) default 18, – 学生的年龄
address varchar2(100), – 学生的地址
gender char(3) default ‘男’
); – SQL语句结束 我们添加一个 英文状态下的 ;

3.唯一性约束:有数据的情况下。该列不能出现重复的记录。null 不包括
DROP TABLE t_student;
CREATE TABLE t_student(
id number(5) unique , – 学生编号
name varchar2(20) not null, – 学生的姓名
age number(2) default 18, – 学生的年龄
address varchar2(100), – 学生的地址
gender char(3) default ‘男’
); – SQL语句结束 我们添加一个 英文状态下的 ;
– 非空+唯一约束
DROP TABLE t_student;
CREATE TABLE t_student(
id number(5) unique not null , – 学生编号
name varchar2(20) not null, – 学生的姓名
age number(2) default 18, – 学生的年龄
address varchar2(100), – 学生的地址
gender char(3) default ‘男’
); – SQL语句结束 我们添加一个 英文状态下的 ;

4.主键约束:能够唯一标识该字段的约束 主键修饰的字段是不能重复且不能出现空值的
– 而且一张表中只能出现一个注解【联合主键:一个主键包含多个字段】
DROP TABLE t_student;
CREATE TABLE t_student(
id number(5) primary key , – 学生编号
name varchar2(20) not null, – 学生的姓名
age number(2) default 18, – 学生的年龄
address varchar2(100), – 学生的地址
gender char(3) default ‘男’
); – SQL语句结束 我们添加一个 英文状态下的 ;

– 建表周再添加
DROP TABLE t_student;
CREATE TABLE t_student(
id number(5) , – 学生编号
name varchar2(20) not null, – 学生的姓名
age number(2) default 18, – 学生的年龄
address varchar2(100), – 学生的地址
gender char(3) default ‘男’
); – SQL语句结束 我们添加一个 英文状态下的 ;
alter table t_student add constraints pk_student_id primary key(id);

5.外键:表于表之间的关联关系
– 外键:就是在主表中可以重复出现,但是他的值是另一个表的主键,外键使两个表关联
drop table t_class;
create table t_class(
id number(3) primary key,
name varchar2(30)
);

drop table t_student ;
create table t_student(
id number(3) primary key,
name varchar2(30) ,
classid number(3)
);

– 维护外键关联关系
alter table t_student add constraints fk_student_classid foreign key(classid) references t_class(id);

6.check约束:在字段类型的基础上。更进一步的提升数据的精度
DROP TABLE t_student;
CREATE TABLE t_student(
id number(5) unique not null , – 学生编号
name varchar2(20) not null, – 学生的姓名
–age number(2) check(age > 1 and age < 25), – 学生的年龄
age number(2) check(age between 1 and 25), – 学生的年龄
address varchar2(100), – 学生的地址
gender char(3) check (gender in (‘男’,‘女’))
); – SQL语句结束 我们添加一个 英文状态下的 ;

四、DML语句

DML数据操作语言:通过SQL来实现数据的插入、修改和删除操作,在Oracle中常用的数据操作语音有

  • INSERT
  • UPDATE
  • DELETE
  • SELECT … FOR UPDATE

1.INSERT

数据插入语句

INSERT INTO 表名(fieldName1,fieldName1,...fieldNameN)values(value1,value2,...,valueN)
-- 案例
insert into t_class(id,name)values(1,'计算机1班');

简略的语法:如果我们插入的记录需要给表中的每一个字段都添加信息。那么我们可以省略 字段列表,但是后面的值列表必须和表结构中的字段顺序保持一致

INSERT INTO 表名 values(value1,value2,...,valueN)

INSERT  INTO t_class values(2,'计算机2班');
-- 下面是错误示范
INSERT  INTO t_class values('英语一班',3);

2.序列号

主键:我们插入数据的时候就需要保证他的唯一性

  • Orlace中提供的序列号的方案来解决
  • MySQL中提供了主键自增的方案
  • 在分布式环境下。我们可以通过分布式ID来解决

序列号的语法:

CREATE SEQUENCE 序列名称
[INCREMENT BY] -- 每次自增的数量
[START WITH 1] -- 从1开始计数
[NOMAXVALUE]   -- 不设置最大值
[NOCYCLE]     -- 一直累加,不循环
CACHE 10;     -- 缓存10

案例应用

create sequence s_class; -- 从1开始  每次增长1个
-- currval是在执行了nextval之后才会生效
select s_class.currval from dual;
select s_class.nextval from dual;

imagepng

插入语句的应用

INSERT  INTO t_class values(s_class.nextval,'计算机2班');

3.UPDATE

需要对已经插入到表结构中的数据做出调整。对应的语法结构

UPDATE 表名 SET field1=value1,field2=value2 ... [where 条件]
update t_class set name = '软件班级' ;

update t_class set name = '计算机1班' where id = 15;
-- 更新id为18 19 21的记录为 '计算机2班'
update t_class set name = '计算机2班' where id = 18 or id=19 or id=21 ;
update t_class set name = '计算机3班' where id in (14,16,17) ;
update t_class set name = '英语1班' where id >= 100 and id <=200 ;
update t_class set name = '英语2班' where id between 100 and 130 ;
update t_class set name = 'test' where id != 24 ;
update t_class set name = 'test666' where id <> 22 ;

4.删除语句

 DELETE FROM 表名 [where 条件]
 delete from t_class where id = 17;
 -- 对于null的查询我们是用 is null 来匹配的
 delete from t_class where name is null;

 -- delete 删除会做数据的缓存
delete from t_class ; -- 会删除表中的所有的数据。 删库跑路 要小心使用
-- 删除全表的数据,直接删除数据。不做缓存处理。 效率高。风险大
truncate table t_class ;

5.多行插入

-- 多行插入
insert into t_class_copy(id,name)
select id,name from t_class

select * from t_class_copy1

-- 复制表
create table t_class_copy as select * from t_class where 1 != 1;

-- 复制表 带有数据的情况
create table t_class_copy1 as select * from t_class ;

五、DQL语句

DQL:数据查询语言。

查询语句的语法结构

--语法结构
SELECT <列名>
FROM <表名>
[WHERE <查询条件> ]
[ORDER BY <排序的列名>[ASC或者DESC] ]
[GROUP BY <分组字段> ]

1.简单查询语句

1.1 知识点讲解

全表查询中的内容:

create sequence s_student;
insert into t_student(id,name,age,address,gender)values(s_student.nextval,'王五',18,'湖南长沙','女') ;

-- 1.查询学生表的所有信息 * 表示查询表中的所有的列
select * from t_student;

-- 2.查询特定的列
select id,name,age from t_student;

-- 3.查询信息使用别名来标识,别名不能用' 我们得使用 "
select 
    id as "学生编号",
    name as "学生姓名",
    age as "学生年龄" 
from t_student;
-- 我们可以省略 ""
select 
    id as 学生编号,
    name as 学生姓名,
    age as 学生年龄 
from t_student;
-- 我们还可以省略 as 关键字
select 
    id  学生编号,
    name 学生姓名,
    age  学生年龄 
from t_student;
-- 如果别名中有特殊符号的情况。那么不能省略""

select 
    id  "【学生编号】",
    name as 学生姓名,
    age as 学生年龄 
from t_student;

-- 4.常量的处理
select id,name,age ,29 体重 from t_student

-- 5.查询学生信息。 id 和 name 拼接起来 ||
select id,name,age , '【'||id||'-'||'name'||'】' 组合 from t_student

带条件的查询:

drop table t_student ;
create table t_student(
id number(3) primary key,
name varchar2(30) ,
gender char(3) ,
age number(2),
class_id number(5)
)

Insert into DPB.T_STUDENT (ID,NAME,GENDER,AGE,CLASS_ID) values (1,'张三','男 ',18,1001);
Insert into DPB.T_STUDENT (ID,NAME,GENDER,AGE,CLASS_ID) values (2,'李四','女 ',22,1002);
Insert into DPB.T_STUDENT (ID,NAME,GENDER,AGE,CLASS_ID) values (3,'小明','男 ',35,1003);
Insert into DPB.T_STUDENT (ID,NAME,GENDER,AGE,CLASS_ID) values (4,'小花','女 ',16,1001
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值