Oracle
Oracle下载与安装
百度云链接:
链接:https://pan.baidu.com/s/14WWdS_FbXJEvJmZ03W-NqQ
提取码:ppl6
Oracle基本介绍
数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的 仓库 ;随着信息技术和市场的发展,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的 表格 到能够进行海量数据存储的 大型数据 库系统 都在各个方面得到了广泛的应用。数据库现在已经成为数据管理的重要技术,也是计算机的重要分支。由于数据库具有数据结构化,最低冗余度、较高的程序与数据独立性,易于扩展、易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。数据库的运用从一般管理扩大到计算机辅助技术、人工智能以及科技计算等领域。随着数据库技术的发展,计算机技术也随着得到了很大的发展,数据库为我们提供了可以快速存储以及检索的便利,它也为近几年软件可以如此普及贡献不小的力量。
常用的数据库
分类 | 产品 | 特点 |
---|---|---|
小型 | access、 foxbase | 负载量小,用户大概 100 人以内(留言板、信息管理系统) ;成本在千元之内 ,对安全性要求不高 |
中型 | sqlservler、 mysql | 负载量,日访问在 5000~10000 ;成本在万元以内(商务网站) ;满足日常安全需求 |
大型 | sybase、 db2、 oracle | 海量负载,可以处理海量数据(sybase<oracle<db2海量处理能力);安全性高,相对贵 |
DBMS:(Database Management System)
数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护
数据库,简称 DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过 DBMS
访问数据库中的数据,数据库管理员也通过 dbms 进行数据库的维护工作。它可使多个应用程序和用户用不同
的方法在同时或不同时刻去建立,修改和询问数据库。大部分 DBMS 提供数据定义语言 DDL (Data Definition Language)和数据操作语言 DML ,供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
根据存储模型可将数据库划分为关系型数据库和非关系型数据库。
关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。标准数据查询语言 SQL 就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。当前主流的关系型数据库有 Oracle、DB2、Microsox SQL Server、MicrosoxAccess、MySQL等。Oracle Database,又名 Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle 数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的适应高吞吐量的数据库解决方案。
SQL(Structured Query Language)语言介绍
SQL(Structured Query Language)为数据库的语言,在1974 年由Boyce【博伊斯】和Chamberlin【钱伯林】提出的一种介于关系代数与关系演算之间的结构化查询语言,是一个通用的、功能极强的关系型数据库语言。它包含三部分:
命令分类操作:
分类 | 命令 |
---|---|
DDL | create:创建;drop:删除;alter:修改;rename: 重命名; truncate:截断 |
DML | insert:插入;delete:删除;update:更新;select:查询 |
DCL | grant:授权;revoke:回收权利;commit:提交事务;rollback:回滚事务 |
常用字符代表意思
操作命令
对已有结构的操作,例如数据库,用户,表格,行,列的操作。
操作数据库
操作 | 案例 |
---|---|
操作表格 alter create drop
操作 | 案例 |
---|---|
create 新建 | CREATE TABLE student (表结构) |
drop 删除 | 删除整表:DROP TABLE Student 删除列名这一列:alter table 表名 drop column 列名 |
add 添加 | ALTER TABLE student ADD (studentName ,varchar2(20)) |
modify 修改 | 修改列类型:alter table 表名 modify (列名varchar(255)); 修改列名字:alter table 表名 rename column 旧列名 to 新列名; |
操作用户 create drop grant revoke
操作 | 案例 |
---|---|
grant 给予权限 | grant(select, update, insert, alter, index, delete, all)on product to user grant dba to SCOTT(用户A的权限给B) 后面加上with grant option赋予转移权限的能力 |
revoke 回收权限 | 替换grant即可 |
create 创建用户 | create user abc identified by 123456; //创建用户名adc密码123456 需要管理员创建 |
drop 删除 | drop user 用户名称 cascade; 删除用户 drop user ABC cascade;删除用户,及级联关系也删除掉 |
操作表格行 select update delete insert
操作 | 案例 |
---|---|
select 查询 | select * from student |
update 修改 | update 表名 set 列名=列值改变量(±*/), 字段2,字段3, where 行限定条件; |
delete 删除 | delete from 表名 where 行限定条件; |
insert 插入 | insert into 用户名.表名(属性1,属性2…/可选的/)values(值,值…); |
函数
逻辑关系操作符
名称 | 作用 |
---|---|
= 、>、 <、 >=、 <=、 !=、 <> | 单个之间的比较 |
and 、or、 not、 union(去重)、 union all(不去重,重复显示)、 intersect(交集) 、minus(差集) | 集合之间的操作 |
null :is null、 is not null、 not is null | 空值得判断 |
like :(模糊查询) % (多个字符) __ (‘单个字符’) | 模糊匹配 |
in(属于) 、 exists(难点) 及子查询(子查询存在,子查询不存在) | 单个与集合的关系 |
特定含义函数
名字 | 功能 |
---|---|
min(最小) max (最大) avg (平均) count (个数)sum(求和) | 操作于集合 |
abs(平均值)round(四舍五入) | 操作于单个 |
sysdate(获取当前日期) | 返回日期 |
last_day(date):当月最后一天 add.months(date,n) add.day(date,n),add.year(date,n):加上n extract(year from date):获取年份,同上。 | 时间函数 |
to_char(date,‘YYYY-MM-DD HH24:MI:SS’) to_date(‘YYYY-MM-DD HH24:MI:SS’,date) to_number() | 格式转化函数 |
nvl(x,value)如果X为空,返回value,否则返回X NVL2(x,value1,value2) 如果x非空,返回value1,否则返回value2 | 空值函数 |
REPLACE(X,old,new) | 在X中查找old,并替换成new |
数据库
三范式
在设计数据库时,存在行业的标准,这个标准也称为条件,即范式 Normal Form。一般遵循三个条件即可,也
就是”三范式”(3NF)。
1NF:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重 复的属性构成,新实体与原实体之间为一对多关系。在第一范式
(1NF)中表的每一行只包含一个实例的信息。
2NF:是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如 emp 表中加上了员工编号(empno)列,因为每个员工的员工编 号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。同时要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的>唯一标识。即第二范式就是非主属性非部分依赖于主键。
3NF:必须先满足第二范式(2NF)。3NF 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(deptno)、部门名称、地址等信息。那么员工信息表(emp)中列出部门编号后就不能再将部门名称、部门地
址等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式
(3NF)也应该构建它,否则就会有大量的数据冗余。即第三范式就是属性不依赖于其它非主属性。
简而言之,最终的目的避免数据重复冗余,1NF–>列不可再分最小原子 (避免重复);
2NF–>主键依赖(确定唯一);
3NF–>消除传递依赖(建立主外键关联 拆分表);
创建,删除表
表名必须唯一,如果存在 ,必须删除
create table 表名(
字段名 类型(长度) 约束,
...其他字段....
..约束........
);
--删除表 以及约束 删除规则 先删除从表 再删除主表
drop table tb_txt cascade constraints;
drop table tb_user cascade constraints;
创建表不加约束
create table people(
id varchar(20), --主键 primary key,
name varchar2(20),
age number(3),
gender varchar(1)
)
--增加注释
comment on table people is '人类表';
comment on column people.id is '身份证id,主 键';
comment on column people.name is '名字';
comment on column people.age is '年龄';
表内加约束
约束没有定义名称,出现冲突无明显提示
约束 | 约束功能 |
---|---|
not null | 非空 |
unique | 唯一 不可重复 |
primary key | 主键 唯一 非空 |
foreign key | 外键约束 依赖外键必须存在 |
check | 检查约束 值在特定的范围 |
default value | 默认值value |
案例:
create table people(
id varchar(20) primary key,
name varchar2(20) unique,
age number(3) check(age>=0 and age<=150)
gender char(3) check(gender in('男','女'))
--依赖另一张表 province varchar2(20) references region(province)
--constraint pk_txt_id primary key(txtid),
--constraint 约束条件
)
表外加约束
对字段操作 | 操作方法 |
---|---|
修改表的约束 | alter table tb_user modify (age default null) |
增加表的约束 | alter table 表名 add constraint(约束) 约束名 约束条件 |
查看某个用户的约束 | select constraint_name(约束名字), constraint_type(约束形式) from user_constraints where owner (用户)= upper(‘SCOTT’); |
查看表的约束 | select constraint_name, constraint_type from user_constraints where table_name = upper(‘emp’); |
查看 字段名+约束 | select constraint_name, column_name from user_cons_columns where table_name = upper(‘emp’); |
约束的禁用与启用 | ALTER TABLE tb_user disable constraint nn_user_name; ALTER TABLE tb_user enable constraint nn_user_name; |
删除约束 | alter table tb_user drop constraint uq_user_email cascade; |
表连接(92)
连接形式 | 例子 |
---|---|
笛卡尔积n*m | select * from emp , dept; |
等值连接 | select ename, dname, e.deptno from emp e, dept d where e.deptno = d.deptno; |
非等值连接 > < != <>between and | select ename, grade, sal from salgrade s, emp e where sal between losal and hisal; |
外连接 左连接 | select dname, nu from dept d, (select count(1) nu, deptno from emp group by deptno) e where d.deptno(+) = e.deptno; |
外连接 右连接 | select dname, nu from dept d, (select count(1) nu, deptno from emp group by deptno) e where d.deptno = e.deptno(+); |
有加号这一边没匹配到也会显示。
两边都有加号就是左右连接了。
表连接(99)
连接形式 | 例子 |
---|---|
笛卡尔积 cross join | |
等值连接 自然连接(主外键、同名列) natural join | |
等值连接 join using连接(同名列) -->等值连接 | |
等值连接 join on 连接 | |
外连接 lex/ right [outer] join on | |
全连接 full join on/using |
视图与索引
视图
视图:建立在表|结果集|视图上的虚拟表,有以下作用
- 简化:select 查询语句
- 重用:封装select语句 命名
- 隐藏:内部细节
- 区分:相同数据不同查询
若没有视图权限获取权限
前提: create view -->组 connect resource dba
授权: -->sqlplus /nolog
a)、sys登录 conn sys/123456@orcl as sysdba
b)、授权: grant dba to scott; 回收: revoke dba from scott;
c)、重新登录
create or replace view 视图名 as select语句 [with read only];
索引
要求:所有列必须存在名称。
索引: 提高查询速度的一种手段 -->目录
1、唯一性较好字段适合建立索引
2、大数据量才有效果
3、主键|唯一: 唯一索引
create index 索引名 on表名 (字段列表...) drop index 索引名
create index idx_emp on emp(sal,ename);
drop index idx_emp;
select * from emp order by sal,ename;
嵌套大法好,不会就嵌套。。。。。。。。
练习题:
链接:https://pan.baidu.com/s/14WWdS_FbXJEvJmZ03W-NqQ
提取码:ppl6