一、Oracle数据库概述
1. 数据库物理组成
- 数据文件-Data File
用于储存数据库中全部数据
- 日志文件-Redo Log File
记录数据库中的变更,便于出现错误时恢复数据
- 控制文件-Control File
二进制文件,用于储存数据库物理结构
- 配置文件
储存数据块大小,内存结构配置等
- 这些文件不能直接操作,只能通过Oracle实例去操作
2. 用户
-
sys:管理员用户 sysdba
- 此用户具有所有权限
- 此用户可以免密登录
- 维护系统信息,管理实例
-
system
- 用来管理用户,权限,储存等
-
scott
- 默认密码tiger
- 自带的普通用户,不能直接使用,需要解锁后重新设置密码
-- 创建用户
create user 用户名 identified by 密码;
-- 修改用户密码
alter user 用户名 identified by 密码;
-- 删除用户
drop user 用户名;
drop user 用户名 cascade;
-- 赋权限/角色
grant 权限/角色 to user;
-- 移除权限/角色
revoke 权限/角色 from user;
3. 数据库实例
实例是一个数据库对象
实例名就是数据库名
精简版:XE
完整版:ORCL
4. 启动服务并连接数据库
启动服务必须打开Service和Listener
登录:默认端口1521
二、约束和表关系
约束
- 实体完整性约束
- 域完整性约束
- 引用完整性约束
- 自定义约束
-- 添加主键约束
alter table 表名
add constraint 约束名 primary key (字段名);
-- 添加非空约束 (有非空和默认时,先写默认再写非空)
alter table 表名
modify (字段名 not null );
-- 添加唯一约束
alter table 表名
add constraint 约束名 unique (字段名);
-- 添加检查约束
alter table 表名
add constraint 约束名 check (检查判断条件);
-- 添加外键约束
alter table 表名
add constraint 约束名 foreign key references 主表 (字段);
-- 删除约束
alter table 表名
drop constraint 约束名;
表
-- 创建表
create table 表名(字段名 数据类型(长度),字段名 数据类型(长度));
-- 删除表
drop table 表名;
-- 添加表字段
alter table 表名
add (字段名 数据类型(长度));
-- 修改表字段
alter table 表名
modify (字段名 数据类型(长度));
-- 删除表字段
alter table 表名 drop (字段名);
alter table 表名 drop column 字段名;
-- 表重命名
rename 旧表名 to 新表名;
-- 增加注释
comment on table 表名 is ‘注释‘;
comment on table 表名.属性名 is ‘注释‘;
-- 表截断
-- 清空表 不可回滚 只生成一次日志文件
truncate table 表名;
-- 删除
-- 删除补空值
on delete set null;
-- 级联删除
on delete cascade;
数据类型
字符类型 | 数值类型 | 日期类型 | 大对象类型 |
---|---|---|---|
char 固定长度字符串,长度为可储存字节数 | number(总位数,小数位数) | date 普通日期类型 | BOLB保存非结构化二进制数据,最大4G |
nchar 固定长度字符串,长度为可储存字符数 | int 整数类型 | datestamp有精度的日期类型,精度为0-9,默认为6 | |
varchar2 不固定长度字符串,长度为可储存字节数 | |||
nvarchar2 不固定长度字符串,长度为可储存字符数 |
三范式
- 第一范式:原子性--每一列都是不可再分的最小数据单元
- 第二范式:唯一性--要求必须有唯一标识(主键),非主键字段完全依赖主键
- 第三范式:冗余性--字段之间不存在传递依赖,任何字段不能由其他字段派生而来
ER表达式
- 矩形:实体
- 圆形:属性
- 菱形:关系
三、基础操作
-- 1. select 查询
select 字段一,字段二,字段三 from 表名;
---------------------------------------------------------------------------------------------
-- 2. insert 添加
-- 给指定字段添加值
insert into 表名 (字段一,字段二,字段三) values (值一,值二,值三);
-- 按顺序添加所有字段值
insert into 表名 values (值一,值二,值三);
-- 将一个表中的数据赋值到新表中 【后面有个判断如果为false则只复制结构】
create table 新表名 as select 字段 from 旧表 [where 1 = 2];
-- 将一个表中的数据添加到令一个表中
insert into 表1(字段) select 字段 from 表2;
---------------------------------------------------------------------------------------------
-- 3. update 修改 【可以添加修改条件】
update 表名 set 字段名 = 字段值 [where 字段 = 值];
---------------------------------------------------------------------------------------------
-- 4. delete 删除 【可以添加删除条件】 可回滚 每次执行都会生成日志文件
delete from 表名 [where 字段 = 值];
-- 序列
create sequence 序列名;
-- 产生一个序列值
nextval
-- 删除序列
drop sequence 序列名;
四、Oracle运算符
1. distinct 去重
2. where 条件查询
3. +-*/ 算数运算符
4. = , !=(<>) , > , < , <= , >= , any , all , some 条件运算符
5. and , or , not 逻辑运算符
6. || sql中的拼接符
7. in 在...中
8. between and 在...和...之间
9. is null 为空
10.like 模糊查询
11._ % 模糊查询通配符
12.order by [acs|desc] 排序
13.group by [having] 分组【查询】
五、高级查询
多表查询
- 内连接
表一 inner join 表二 on 连接条件
- 外连接
特殊关键词
1. identified by 由...确定
2. cascade 级联删除
3. create session 创建连接
4. resource 资源角色
5. connect 连接角色
6. primary key 主键(非空 唯一)
7. constraint 约束