Oracle期末复习
Oracle期末复习
1.引言
本部分介绍大型数据库和云计算相关概念,了解云数据库关系型数据库的基本常识
2.Oracle 12c 数据库的管理
- 1.创建/删除数据库表空间
create tablespace test1 datafile '/u01/app/oracle/test1.dbf' size 200M;
drop tablespace test1 including contents and datafiles;
- 2.数据库实例的含义
一个完整的Oracle数据库包括两个部分:数据库和数据库实例
💎数据库是存储数据的多个物理文件的集合,如控制文件,数据文件,参数文件,日志文件,临时文件等 ,它是静态的、永久的,只要文件存在它就存在。数据库名(db_name)就是对数据库的标识。
💎Oracle实例是一个进程。就是由内存空间和工作进程两部分组成。我们只能通过实例操作数据库,同一时间,一个实例只能打开一个数据库,也就是一个实例只能操作或管理一个数据库,但一个数据库可以被多个是实例打开。
- 3.容器数据库及可插拔数据库的区别以及基本使用
💎容器数据库是Oracle 12c引入的新特性,允许容器数据库(Container Database)中创建并维护多个数据库,这样的数据库被称为PDB(Pluggable Database)
💎基本使用
# 以DBA连接
sqlplus sys/oracle@//localhost:1521/orcl as sysdba
# 查看当前数据库
show con_name
# 查看数据文件,日志文件,控制文件
select * from v$logfile;
select * from v$tablespace;
select * from v$controlfile;
# 切换数据库
alter session set container=pdb;
# 创建pdb
create pluggable database pdb1;
# 打开关闭指定的pdb
alter pluggable database pdb1 open;
# 切换pdb
select status from v$instance;
- 4.oracle监听程序的管理
lsnrctl status 查看运行状态
lsnrctl stop 停止监听
lsnrctl start 启动监听
- 5.数据库网络配置
打开图形化工具,进行点着修改
- 6.数据库管理工具的基本使用(Sqlplus,sql developer)
- 7.数据对象,数据字典,数据库存储结构的理解
数据对象:而单独的一张表就称为数据对象
数据字典:数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述
数据库存储结构:
逻辑结构:
1、数据库集群-Database cluster
2、数据库-Database
3、表空间-tablespace
物理结构:
一个tablespace对应一个目录,存储在文件内,并建立索引
- 8.用户的增加删除,权限的赋予
#创建用户
create user steveyu identified by "Root123.." default tablespace test;
#给用户授予权限
grant create session to steveyu;
grant connect,resource to steveyu;
grant dba to steveyu;
grant resource to steveyu;
#删除用户
drop user steveyu cascade;
3.SQL基础
- 1.表操作
1.创建表
create table A(
id int,
name varchar2(10),
money number(7, 2),
birth date,
birthtime timestamp
)
2.删除表
drop table A;
3.查看表结构
desc A;
4.增加数据
insert into A values(1, 'hi')
5.修改数据
update A set id=2 where name='hi';
6.查询数据
select * from A;
7.删除数据
delete from A where id=2;
8.约束
create table money(
amount int primary key
);
create table people(
id int not null,
name varchar2(10),
identity varchar2(20) unique,
constraint pri_id primary key(id)
)
9.函数
字符函数
--cancat 连接字符串
select concat('hello','oracele') from dual;
或者
select 'hello'||'oracele' from dual;
--lpad() 左填充
select lpad('abc',5,'*') from dual;
--rpad() 右填充
select rpad('abc',5,'*') from dual;
--lower() 小写字母
select lower(ename) from emp;
--upper() 大写字母
select upper(ename) from emp;
--initcap() 首字母大写,其余小写
select initcap(ename) from emp;
--length() 字符串的长度
select length(ename) from emp;
--substr(字符串,开始位置,长度) 截取字符串
select sunstr(ename,0,2) from emp;
--instr(字符串,字符) 查看字符是否在字符串中存在,不存在返回0;存在则返回字符所在的的位置
select instr('abc','a') from dual;
--TRIM(字符 FROM 字符串) 去掉字符串首尾的字符
select ename,trim('S' from ename) from emp;
--to_char() 将其他类型转成字符类型
select to_char(hiredate,'yyyy-mm-dd hh24:mi:ss') from emp;
--查看是否有人今天过生日
select * from emp where to_char(hiredate,'mmdd')=to_char(sysdate,'mmdd');
--to_date() 把其他类型转换为日期类型
update emp set hiredate=to_date('2009-10-1','yyyy-mm-dd') where empno=9000;
--replace(字符串,字符串1,字符串2) 将字符串中的字符1替换成字符2;
select replace(ename,'S','*') from emp;
--translate(字符串,字符串1,字符串2) 按位逐个替换
select translate(ename,'abc','123') ename from emp;
--ASCII(char) 求字符的ascii码
select ascii('A') from dual;
日期函数
--ADD_MONTHS(日期,数字) 在已有的日期上加一定的月份;
select add_months(sysdate,1),sysdate from dual;
--把天数加一
select sysdate,sysdate+1 from dual;
--用系统时间减去一个日期
select sysdate-to_date('2018-7-8','yyyy-mm-dd') from dual;
--LAST_DAY(日期) 求出该日期的最后一天.
select last_day(sysdate) from dual;
--MONTHS_BETWEEN(日期1,日期2) 求出两个月之间的天数(注意返回的天数为小数)
select months_between(sysdate,'8-7月-2020') from dual;
--NEXT_DAY(d,char) 返回d指定的日期之后并满足char指定条件的第一个日期
select next_day(sysdate,'星期一') from dual;
--NVL(字符串,替换字符) 如果字符串为空则替换,否则不替换
select ename,nvl(comm,0) from emp;
--如果不为空,就显示第一个数据,为空时显示第二个数据
select ename,nvl2(comm,0,100) from emp;
4.pl/sql编程
- 1.plsql基础语法(变量定义声明,运算符,选择循环,异常处理,记录类型(索引、嵌套表、可变数组),游标
- 2.子程序的定义和使用(存储过程、存储函数)
- 3.包的定义使用(如何建立包,运用包管理程序,常见的系统包和运用)
1.插入一条记录并显示
DECLARE
Row_id UROWID;
info VARCHAR2(40);
BEGIN
INSERT INTO dept VALUES (90, ‘SERVICE’, ‘BEIJING’)
RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc
INTO row_id, info;
DBMS_OUTPUT.PUT_LINE(‘ROWID:’||row_id);
DBMS_OUTPUT.PUT_LINE(info);
END;