Oracle数据库

Ⅰ 数据库

  ①层次型数据库
  ②网状型数据库
  ③关系型数据库(主要介绍)

E-R图:属性(椭圆形),实体(矩形),联系(菱形-一对一、一对多、多对多)
注:有的联系也有属性

关系型数据库的设计范式:

  第一范式(1NF):属性不可再分,字段保证原子性
  第二范式(2NF):在满足1NF的基础上,要求表中的每条记录必须被唯一的区分
  第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

Oracle数据库:
  三大概念:实例、数据库、数据库服务器
  实例:指一组Oracle后台进程以及在服务器中分配的共享内存区域;
  数据库:由基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等组成的物理文件集合;
  数据库服务器:指管理数据库的各种软件工具(比如,sqlplus、OEM等)和实例及数据库三个部分。
  实例与数据库两者联系:实例用于管理和控制数据库,而数据库为实例提供数据;
一个数据库可以被多个实例装载和打开,而一个实例在其生存期内只能装载和打开一个数据库。

Oracle数据库的逻辑存储结构  

 

     

 

Ⅰ表空间管理
  一)创建表空间
   语法:

create [smallfile小文件 | bigfile大文件表空间] tablespace 表空间名 datafile 存放路径 size ***k/m reuse -【options】-如下
本地化管理方式:extent management local [autoallocal自栋扩展 |uniform size **k/m 等同大小进行]
自动扩展:autoextent [on | off] next **k/m  ##若自动,则设置next的值
在线/离线:online | offline
永久/临时表空间:permanent | temporary
是否产生日志:logging | nologging  ##默认产生
//代码示例//
--查询表空间
select tablespace_name,file_name,bytes from dba_data_files order by tablespace_name; 

--创建表空间
create tablespace tbs_test1 datafile 'D:\oracle_service\oracle_tablespace\tbs_test1.DBF' size 10m reuse extent management local autoallocate; select * from v$datafile;
--重命名
alter tablespace tbs_test rename to tbs_test1;
--查询数据文件
select tablespace_name,file_name,bytes,autoextensible from DBA_DATA_FILES;
--添加数据文件
alter tablespace tbs_test1 add datafile 'D:\oracle_service\oracle_tablespace\tbs_test2.DBF' size 10M reuse autoextend on next 2m maxsize unlimited;

--删除数据文件
alter tablespace tbs_test1 drop datafile 'D:\oracle_service\oracle_tablespace\tbs_test2.DBF';

--修改数据文件为自动扩展
alter database datafile 'D:\oracle_service\oracle_tablespace\tbs_test1.DBF' autoextend on next 2m maxsize unlimited;

  二)撤销表空间
  

create undo tablespace avatar_undo datafile ..
alter system set undo_tablespace=avatar_undo

  作用:使读写一致、可回退事务、事务恢复、闪回操作

参数:
undo_tablespace
undo_management
undo_retention

  三)临时表空间:(磁盘空间)

create temporary tablespace tablespace_name datafile ..

 

Ⅰ Oracle用户管理
 一)【用户】

  查询用户

select * from dba_users;
select * from all_users;
select * from user_users;

 

  创建一个用户peppa,密码peppa,默认表空间

create user peppa identified by peppa;

  创建用户yclhj,密码yclhj,表空间为users表空间

create user yclhj identified by yclhj default tablespace users;

 

  查询系统权限和对象权限【权限】

select * from system_privilege_map;
select * from table_privilege_map;

  查看角色【角色】

select * from dba_roles;

 

  直接给peppa用户授予登录权限create session

 

grant create session,alter session to peppa with admin option;

  通过角色来添加用户权限

grant connect,resource to peppa;
grant connect,resource to yclhj; 

 二)【用户与角色】
  用户拥有的角色

select * from dba_role_privs;
select * from user_role_privs;
select * from role_role_privs;

 三)【用户与权限】
  用户拥有的系统权限:

select * from dba_sys_privs;
select * from user_sys_privs;

  用户拥有的对象权限:

select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
select * from dba_col_privs;
select * from all_col_privs;
select * from user_col_privs;

 

Ⅰ SQL语句

  1)DML语句(数据操作语言)

    Insert / Update / Delete/merge

  2)DDL语句(数据定义语言)

    Create / Alter / Drop / Truncate(删除数据立即生效)
  3)DCL语句(数据控制语言)
    Grant(赋于权限 ) / Revoke(回收权限 )
  4)事务控制语句
    Commit / Rollback / Savepoint
  5)查询语句
    简单查询 / 条件查询 / 连接查询
  6)约束
    NOT NULL 约束:确保某列不能有 NULL 值。
    DEFAULT 约束:当某列没有指定值时,为该列提供默认值。
    UNIQUE 约束:确保某列中的所有值是不同的。
    PRIMARY Key 约束:唯一标识数据库表中的各行/记录。
    CHECK 约束:CHECK 约束确保某列中的所有值满足一定条件。
  7)单行函数
    使用语法:
      函数名称(操作的列 | 具体的数值 [,若干参数])
    1.字符串函数

大小写转换:UPPER()、LOWER()
首字母大写:INITCAP()
替换:REPLACE()
长度:LENGTH()、
截取:①SUBSTR(str,index)     ②SUBSTR(strbegin,size)
连接:CONTACT()

    2.数值函数

round()函数: 表示的是四舍五入,而且是带小数点的
trunc()函数: 直接截取,不再进行四舍五入了('+'是指小数点后,'-'是指小数点前,表示一个方向)
mod()取余

 

    3.转换函数

TO_CHAR() #转换为字符串
TO_DATE() #转换为日期形式
TO_NUMBER() #转换为数字型

    4.日期函数
    当前系统时间:【sysdate】

SELECT SYSDATE FROM dual;

    三大计算公式:
    日期 – 数字 = 日期;
    日期 + 数字 = 日期;
    日期 – 日期 = 数字(天数)

 

MONTHS_BETWEEN(日期1,日期2):求出两个日期之间的月数;
ADD_MONTHS():求出几个月之后的日期;
NEXT_DAY():求出下一个的今天;
LAST_DAY():求出给定日期的最后一天。

 

    5.聚合函数

 

  COUNT():统计数据量;
  SUM():求和;
  AVG():求平均;
  MAX():最大值;
  MIN():最小值;

 

 

    6.通用函数

  ①nvl(): 如果第一个参数为空,就取第二个参数的值,如果不为空就去第一个参数的值
  ②decode() : 多条件判断
    语法:

    DECODE(列 | 值,判断条件1,输出结果1,判断条件2,输出结果2,.....)

  8)子查询

  SQL执行的顺序

    1.FROM先确定从哪个表中获取数据
    2.WHERE对条件加以限定
    3.GROUP BY ...HAVING
    4.聚合函数
    5.SELECT字段筛选
    6.ORDERBY

  语法:

SELECT 查询的字段,(
SELECT 查询的字段
FROM 表名称1 别名,表名称2 别名,....
[WHERE 条件(s)]
[GROUP BY 分组字段]
[ORDER BY 排序字段 ASC | DESC,排序字段 ASC | DESC] ;
)
FROM 表名称1 别名,表名称2 别名,.... (
SELECT 查询的字段
FROM 表名称1 别名,表名称2 别名,....
[WHERE 条件(s)]
[GROUP BY 分组字段]
[ORDER BY 排序字段 ASC | DESC,排序字段 ASC | DESC] ;
)
[WHERE 条件(s) (
SELECT 查询的字段
FROM 表名称1 别名,表名称2 别名,....
[WHERE 条件(s)]
[GROUP BY 分组字段]
[ORDER BY 排序字段 ASC | DESC,排序字段 ASC | DESC] ;
)]
[GROUP BY 分组字段]
[ORDER BY 排序字段 ASC | DESC,排序字段 ASC | DESC] ;

  9)分页查询

  rowid:代表该条记录的物理地址
  rownum :为生成的数据的编号,使用分页需要使用到rownum

select * from emp order by sal;
select rowid,rownum,emp.* from emp;
示例:
--
每页显示3条记录,查询第一页 select * from emp where rownum<=3; --查询第二页记录 select * from emp where rownum>3 and rownum <=6; --rownum>*不存在,条件满足不了 --解决问题:使用子查询先生成rownum,然后再基于生成的rownum进行分页 select empno,ename,sal,comm,job from (select rownum a,empno,ename,sal,comm,job from emp)r where r.a>3 and r.a<=6; --按照sal排序 --正确顺序:先排序,再生成rownum select rownum,empno,ename,sal,comm,job from (select empno,ename,sal,comm,job from emp order by sal); --完整语句 select empno,ename,job,sal,comm from ( select rownum r,empno,ename,job,sal,comm from ( select empno,ename,job,sal,comm from emp order by sal)) where r>3 and r<=6;

 

 

 

 

 

热门相关:嫡嫁千金   重生之将门毒后   异能特工:军火皇后   悠哉兽世:种种田,生生崽   悠哉兽世:种种田,生生崽