一、下载
1.1官网下载
前排提醒:官网下载需要挂vpn加速,可以选择镜像下载
这里选择Windows-x64版本,即64位版本
进行账户注册与登录
二、安装
2.1解压
在你的电脑里选择一块区域,新建文件夹(注意这里不能含有英文)进行解压
2.2配置
选择setup.exe进行配置
默认选择创建并配置单实例数据库
下一步默认选择桌面类
下一步选择创建新Windows用户,我的选择是oracle+123456
下一步设置Oracle基目录,这里建议额外建立文件夹,设置好后数据库文件位置自动随基目录生成,设置口令,建议和密码一致。同时不创建为容器数据库,容器数据库是自12C出现的新特性,下一步弹出不符合标准弹窗点是
核对安装信息,可以保存为响应文件进行静默安装,点击安装,执行时间约15分钟左右
安装完成
三、查看所安装的数据库信息
3.1打开cmd命令行
输入
sqlplus /nolog
出现如下则安装成功
Microsoft Windows [版本 10.0.18363.959]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\zjlic\Documents>sqlplus
SQL*Plus: Release 19.0.0.0.0 - Production on 星期二 4月 5 21:50:22 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
SQL>
3.2登陆https://localhost:5500/em/login
登录用户是之前创建的,若报不安全则无视风险进入,进入如下界面则安装成功
四、问题与卸载
如果遇到问题可以查看弹出窗口的log文件,如报Oracle Database Configuration Assistant失败,log显示
INFO: [2020-9-20 15:45:46] [FATAL] [DBT-10304] Oracle 主目录用户口令不正确
INFO: [2020-9-20 15:45:46] Skipping line: [FATAL] [DBT-10304] Oracle 主目录用户口令不正确。
INFO: [2020-9-20 15:53:11] Oracle Database Configuration Assistant 失败。
则说明重新安装的oracle和之前安装的oracle冲突了,用户输入的口令和第一次的不一致,解决办法是彻底删除上一次安装的oracle,找到deinstall文件夹并以管理员身份执行deinstall.bat文件进行自动卸载操作,执行过程中输入回车或者yes或者是,不能删除的目录在卸载执行完成后手动删除
若不能完全删除,查看
五、使用
以下学习过程基于njupt CS-DBS课程实验要求编写
5.1以数据库管理员的身份登录
打开cmd输入
sqlplus
用户名
system
口令(为之前所设)
将出现以下界面即登入成功
Microsoft Windows [版本 10.0.19043.1586]
(c) Microsoft Corporation。保留所有权利。
C:\Users\zjlic\Documents>sqlplus
SQL*Plus: Release 19.0.0.0.0 - Production on 星期三 4月 6 11:24:43 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
请输入用户名: system
输入口令:
上次成功登录时间: 星期三 4月 06 2022 11:22:21 +08:00
连接到:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
SQL*Plus是一个交互式操作环境,可在提示符SQL> 下键入SQL语句
注:Oracle数据库有三类用户:一般数据库用户(connect)、具有支配部分数据库资源特权的数据库用户(resource)和具有数据库管理员特权的数据库用户(DBA),只有DBA具有创建用户的权力,system/ORACLE是Oracle默认的DBA帐户之一,scott/tiger是Oracle默认的resource级帐户。
5.2 创建用户并授予其系统权限的方法
创建用户并授予系统权限的工作只能由DBA来做。
相关命令如下:
5.2.1 创建用户
SQL>create user 用户名 identified by 口令;
create user B19030417 identified by b19030417;
注意:口令要以字母开头,SQL语句要以 ‘;’ 结束
5.2.2 授系统权限
SQL>grant DBA to 用户名;
grant dba to B19030417;
或 SQL>grant DBA, resource, connect to 用户名;
注:系统权限有connect, resource,DBA,后者兼有前者。
5.3 以自己的用户身份连接到数据库的方法
SQL>connect 用户名/口令
connect B19030417/b19030417
注意:该用户必须具有connect或更高的系统权限,
connect命令不需要以 ‘;’ 结束
5.4 用SQL的DDL语句图书管理系统创建基表
要求定义列完整性、实体完整性、引用完整性
建立简单的图书管理数据库的三个基表(下划线处为主键斜体处为两个外键):
5.4.1 图书(图书编号、分类号、书名、作者、出版单位、单价)
CREATE TABLE 图书
(图书编号 CHAR(4),
分类号 CHAR(4) NOT NULL,
书名 VARCHAR(12),
作者 VARCHAR(5),
出版单位 VARCHAR(10),
单价 DEC(5,2),
primary key(图书编号));
5.4.2 读者(借书证号、姓名、单位、职称)
create table 读者
(借书证号 char(4) not null,
姓名 char(5) not null,
单位 varchar(10),
职称 varchar(6),
primary key(借书证号));
5.4.3 借阅(借书证号、图书编号、借阅日期、备注)
CREATE TABLE 借阅
(借书证号 CHAR(4),
图书编号 CHAR(4),
借阅日期 DATE NOT NULL,
备注 VARCHAR(20),
PRIMARY KEY(借书证号,图书编号),
FOREIGN KEY(借书证号) REFERENCES 读者(借书证号),
FOREIGN KEY(图书编号) REFERENCES 图书(图书编号));
5.5 为基表“读者”补充定义:职称只能取初级、中级、高级之一
ALTER TABLE 读者 ADD CHECK (职称 IN('初级','中级','高级'));
5.6 用SQL的DML语句向上述基表中增加、修改和删除数据
5.6.1 向三个基表中插入数据
5.6.1.1 插入图书表中数据
insert into 图书
values('0001','TP31','计算机基础','WANG','高等教育', 17.00);
这里在插入时会报错,插入的字段超过了设定的大小
这里对字段长度进行修改,注意,这里使用以下命令会报错
ALTER TABLE 图书 ALTER COLUMN 书名 VARCHAR(30);
询问老师后,解释是oracle本身不支持ALTER COLUMN命令,正确命令是
ALTER TABLE 图书 MODIFY 书名 VARCHAR(30);
ALTER TABLE 图书 MODIFY 作者 VARCHAR(10);
ALTER TABLE 图书 MODIFY 出版单位 VARCHAR(30);
这里可以查看一下表的状态
describe 图书
修改成功
接着重新插入即可
5.6.1.2 插入读者表中数据
同样先修改字段长度再插入
ALTER TABLE 读者 MODIFY 姓名 CHAR(10);
ALTER TABLE 读者 MODIFY 单位 VARCHAR(30);
insert into 读者
values('T201','LIXIN','计算机系','中级');
注意这里读者表后没有接字段名称,系统会按次序进行赋值,那在下面values处就应该插入所有字段数据,空的需要用NULL表示
5.6.1.3 插入借阅表中数据
insert into 借阅(借书证号,图书编号,借阅日期)
values('T201','0001',to_date('2022-04-10','yyyy-mm-dd'));
5.6.2 数据的修改和删除
5.6.2.1 为编号为0002的图书填上作者和出版单位
update 图书
set 作者='ZHANG',出版单位='高等教育'
where 图书编号='0002';
5.6.2.2 将所有图书单价上调5%
update 图书
set 单价=单价 * 1.05;
5.6.2.3 将书名包含‘计算机’的书分类号改为’TP38’
update 图书 set 分类号='TP38'
where 书名 like '%计算机%';
5.6.2.4 删除借书证号以S开头的所有读者信息和借阅信息
delete from 借阅
where 借书证号 like 'S%';
delete from 读者
where 借书证号 like 'S%';
5.7 用SQL的QL语句完成查询
5.7.1 列出图书馆中所有藏书的书名及出版单位
select 书名,出版单位
from 图书;
5.7.2 查询工厂所有借阅了图书的读者姓名和职称
使用带有in谓词的嵌套子查询(这里采用DISTINCT目的是消除取值重复的行,对应书本P.92)
select distinct 姓名,职称
from 读者
where 借书证号 in(select 借书证号
from 借阅) AND 单位='工厂';
或使用等值连接查询(对应书本P.99)
select 姓名,职称
FROM 读者,借阅
where 读者.借书证号=借阅.借书证号 and 单位='工厂';
未选定行表示查询无结果
5.7.3 查询藏书中比高等教育出版社所有图书单价更高的书籍
select * from 图书
where 单价>ALL(select 单价
from 图书
where 出版单位='高等教育');
5.7.4 查询各出版社图书的最高价、最低价和平均价格
这里在查询中使用了聚集函数,同时GROUP BY子句表示按出版单位进行分组
select 出版单位,MAX(单价),MIN(单价),AVG(单价)
from 图书 GROUP BY 出版单位;
5.7.5 列出当前至少借阅了2本图书的读者及所在单位
由于WHERE子句中是不能用聚集函数作为条件表达式的,所以采用HAVING子句
select 姓名,单位 from 读者
where 借书证号 in (select 借书证号
from 借阅
group by 借书证号
having count(*)>=2);
5.8 用SQL的DDL语句创建视图、索引
5.8.1 建立各单位当前借阅图书情况的简单统计视图,视图中包括单位名称,借书人数和借阅人次
create view 统计(单位,人数,人次)
as select 单位,count(distinct 读者.借书证号),
count(读者.借书证号)
from 读者,借阅
where 读者.借书证号=借阅.借书证号 group by 单位;
5.8.2 对该视图进行查询
select * from 统计;
5.8.3 按出版社为图书表建立一个索引
索引建立在该表的出版单位这一列上,排序次序是降序
create index 图书表 on 图书(出版单位 desc);
展示索引
MySQL使用如下命令
SHOW INDEX FROM 图书;
Oracle使用如下命令
select * from user_indexes where table_name = '图书';
*5.9 以自己的用户登录数据库,建立员工表,其结构同scott用户的员工表emp(补充)
Oracle公司第一个程序员叫scott,他养的猫叫tiger
装好库之后默认是锁定的,需要解锁才能使用
首先切换到system用户下
connect system/123456
导入scott.sql脚本(可以在oracle的安装目录下查找rdbms下的admin文件夹),例如我本机的路径,导入就可以写成
@E:\Application\Oracle19c\rdbms\admin\scott.sql
其次解锁用户
alter user scott account unlock;
修改scott密码为tiger
alter user scott identified by tiger;
再用scott用户登陆
Connect scott/tiger
查找emp表
select * from emp;
在Oracle19c中下应该是有emp表的,这里应该是链接失败了,笔者在另一台电脑成功查找出了emp表,但这里我们选择自己创建
在scott用户下创建
Connect scott/tiger
--建立表 和删除表;
create table emp
(
empno INT(4) not null,
ename VARCHAR(10),
job VARCHAR(9),
mgr INT(4),
hiredate DATE,
sal decimal(7,2),
comm decimal(7,2),
deptno INT(2)
) engine=InnoDB charset=utf8;
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7369, 'SMITH', 'CLERK', 7902,'1980-12-17', 800, null, 20);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-06-13', 3000, null, 20);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-06-13', 1100, null, 20);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);
insert into emp(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);
再次查询emp表此时可以成功查询
最后再以自己的用户登录数据库,建立员工表,其结构同scott用户的员工表emp
Grant all privileges on emp to B19030417;
Connect B19030417/b19030417
create table 员工表 as select * from scott.emp;
自此,对SQL语言的初探索到此结束