数据库ocp

OCP课程基础总结一

2021-10-18  本文已影响0人  北沐城歌__
基本命令
PLSQL
在菜单help--support Info中可以看到 
1-TNS File的配置路径 D:\app\administrator\product\11.2.0\client_1\Network\Admin\tnsnames.ora
orcl = 
  (DESCRIPTION = 
      (ADDRESS_LIST  =
    (ADDRESS = (PROTOCOL  = TCP) (HOST =10.8.1.1) (PORT=1521)
  )
   (CONNECT_DATA = 
      (SERVICE_NAME = orcl)
 )
 )
2-安装plsql后还需要安装oracle的客户端配置tns,才可以用plsql登陆
3-固定tool--windows list的方法是,在window--save layout 
su  - oracle 
sqlplus / as sysdba
开启:startup mount;  关闭:shutdown  immediate;
sqlplus / as sysdba ---------以sys登陆          超级用户(sysdba)
alter user 用户名 account unlock; --------- 解除锁定(必须带“;”号)
alter user 用户名 identified 密码; -------------修改密码
alter database open; 开启数据库操作
alter user scott account unlock;
alter user scott identified by oracle_4U 
conn scott/oracle_4U;
show parameter name; 查看实例名称 
lsnrctl start;  登陆linux服务器开启监听
lsnrctl status;  查看监听状态
在PLSQL Developer这款工具里自带有查看sql历史的快捷键:ctrl+E
oracle有三个默认的用户名和密码~
1.用户名:sys密码:change_on_install
2.用户名:system密码:manager
3.用户名:scott密码:tiger

基本的select查询语句
select * from ename,(sal+200)*1.2 as salnew from emp; 通过别名
select * from emp where sal between 2000 and 3000; 通过between和and
select * from emp where sal in (2000,3000,5000); 通过in 锁定范围信息
select ename,sal from emp where ename like 'A%';  模式匹配
select ename,sal from emp where ename like '_A%'; like的模式匹配
select * from emp where comm is null;  使用null 条件
select * from emp where comm is not null; 使用null 条件
select ename,sal,deptno form emp where sal >1500 or ename like '%A%' or 
deptno in(20,30); 使用or运算符
select ename,sal from emp order by sal; 使用order by 子句可对检索进行排序,ASC 升序(默认是升序)  DESC 降序 
select ename,sal from emp order by sal desc; 降序来排列
select ename,sal,deptno from emp order by 3,2; 通过第三行,第二行来排序顺序
select  distinct deptno from emp; 使用distinct来去重 
select  count(distinct deptno) as new  from emp;
select deptno,job,avg(sal) from emp group bu deptno,job order by deptno; 分组并且按照deptno进行相关的排序


基本函数查询语句
select  lower('SQL COURSER') from dual; 将大写转换为小写
select upper('sql courser') from dual;          将小写转换为大写
select initcap('SQL Course') from dual;   将每个字母的第一个字母变成大写
select round(123.45678,2) test from dual;  取小数点后两位
select sum(sal),avg(sal),min(sal),max(sal) from emp;  总和最大平均最小
select count(*)  from emp; 查看所有的emp的数量大小 
select count(comm)  from emp; 查看emp中comm的个数是多少
条件查询语句
1-使用 case when 来判断刷选
select ename,deptno,sal case deptno when 10 then sal*1.1 when 20 then sal*1.2 else  sal end newsal from emp;   newsal作为新的资金储存  
2-使用 where 或者使用 having:   
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。   
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。
select deptno,job,max(sal) from emp group by deptno,job having max(sal) > 2000 order by max(sal) 
select deptno,job,max(sal) from emp where deptno=30 group by deptno,job;

使用联接显示多个表中的数据
内联接
自然连接是在两张表中寻找那些数据类型和列名都相同的字段,
然后自动地将他们连接起来,并返回所有符合条件按的结果
select * from emp;
select * from dept;
oracle使用using关键字
sql/92标准可以使用using关键字来简化连接查询,但是只是在查询满足下面两个条件时,才能使
用using关键字进行简化。
1.查询必须是等值连接。
2.等值连接中的列必须具有相同的名称和数据类型。
select  ename,deptno from dept natural join emp;
select ename,deptno from dept join emp using(deptno);
在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。
select e.ename,e.sal,d.deptno from emp e join dept d on (e.deptno=d.deptno)
select w.enam,m.ename from emp w join emp m on(w.mgr=m.empno);
外联接
Oracle  外连接(OUTER JOIN)包括以下:
左外连接(左边的表不加限制)
右外连接(右边的表不加限制)
全外连接(左右两表都不加限制)
create table deptnew as select * from emp;
insert into empnew(ename,deptno) values('HANFEI',50)
select e.ename,e.deptno from empnew e left join deptnew1 d on(e.deptno=d.deptno) ;左联接 左表empnew的值不变匹配右表合适的
select e.ename,e.deptno from empnew e right join deptnew d on(e.deptno=d.deptno); 右联接 右表deptnew的值不变匹配左表合适的
全联接 full join 
select e.ename,e.deptno,d.dname from empnew e  full  join deptnew d on(e.deptno=d.deptno); 全联接 
笛卡尔积  交叉联接 列数不变,行数相乘
select e.ename,d.deptno from dept d cross join emp e; 
使用子查询来解决查询
执行单行子查询·
select ename,sal from emp where sal>=(select sal from emp where ename='SCOTT');
select  ename,sal from emp where sal>=(select avg(sal) from emp);
select ename,sal,deptno from emp where sal>=(select avg(sal) from emp)  and deptno=(select deptno from emp where ename='SCOTT');
select deptno,min(sal) from emp group by deptno having min(sal)>(select min(sal) from emp where deptno=30);
 
使用子查询来解决查询
使用any运算符
>any大于查询出来的任一返回值(大于最小值)
<any小于查询出来的任一返回值(小于最大值)
=any和in相同
<>any和!=any相同,即返回不等于查询任一值
select ename,sal,deptno from emp where sal > any(select sal from emp where deptno=30);
select ename,sal,deptno from emp where sal < any(select sal from emp where deptno=30);
>all大于查询出来的最大返回值(大于最大值)
<ally小于查询出来的最小返回值(小于最小值)
=all等于查询结果中的所有值
<>和!=不等于查询结果中的所有值
select ename,sal,deptno from emp where sal<all(select sal from emp where deptno=30);
select ename,sal,deptno from emp where sal>all(select sal from emp where deptno=30);
select e.name from emp e where e.empno not in (select m.empno from emp m);
使用集合运算符
create table dept1 as select * from dept;
create table dept2(dno number(2),dnm varchar2(14),address varchar2(13));
insert into dept1 values(50,'TEACH','SHANCHAT')
Insert into dept2(dno,dnm,address)  select deptno,dname,loc from dept;
insert into dept2 values(60,'sale','beijing')
select * from dept1
使用Union 和 Union all 集合运算符
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
select deptno,dname from dept1 union select dno,dname from dept2;
select deptno,dname from dept1 union all select  dno,dnm from dept2;
使用intersect运算符
UNION 是联集,而 INTERSECT 是交集
select deptno,dname from dept1 intersect select dno,dnm from dept2;
使用minus模式是差集合的模式 
select deptno,dname from dept1 minus select dno,dnm from dept2;
select deptno,dname,loc from dept1 minus select dno,dnm,to_char(null)
from dept2;
处理数据
drop table  表名;
drop table  commodity;
注意:
    1.用drop删除表数据,不但会删除表中的数据,连表结构也被删除了!

truncate table 表名;
truncate  table commodity;
注意:
    1.用truncate删除表数据,只是删除表中的数据,表结构不会被删除!
    2.删除整个表的数据时,过程是系统一次性删除数据,效率比较高
    3.truncate删除释放空间

delete  表名;
delete  commodity;
注意:
    1.用delete删除表数据,只是删除表中的数据,表结构不会被删除!
    2.虽然也是删除整个表的数据,但是过程是系统一行一行地删,效率比truncate低
    3.delete删除是不释放空间的

区别:
TRUNCATE 只能对TABLE;    
DELETE可以是table和view

create table deptnew as select * from dept;
select * from deptnew;
insert into deptnew values(50,'TEACH,'SH');
insert into deptnew(deptno,loc,dname) values(60,'BJ','SALE');
insert into deptnew(deptno,dname) values(70,'abc')  带有空值的行或者是
insert into deptnew(deptno,dname,loc) values(80,'xyz',null) 或者这种方法
insert into empnew(ename,hiredate,sal) values('HANFEI',sysdate,2500);
从其他表中复制行
create table d30(name char(20),sal int); 表名为d30,列为name和sal 类型为char和int
insert into d30(name,sal) select ename,sal from emp where deptno=30;
更改表中的数据
update empnew  set sal=3000 where ename='SCOTT'; 注意区分大小写才可以
update empnew set deptno=(select deptno from empnew where ename='SCOTT'),sal=(select sal from empnew where ename='SCOTT') where ename='HANFEI'
select * from d30;
delete from d30 where sal=1250; 从表中删除行
delete d30 删除所有的行 
detele empnew where deptno=(selete deptno from empnew where ename='SCOTT');
selete * from empnew;
事务处理
使用plsql 中增删改,涉及到数据的操作,如果通过SQL window进行操作的,一定要加上commit;
才可以真正的写到库里面
通过 command windows 来进行操作 
create table test as select * from dept;
select * from test;
commit;
delete test  where deptno=40;
select * from test;
rollback;
select * from test;
commit;  
可以看到之前删除的表又恢复回来了
或者设立 savepoint点进行恢复
delete test where deptno=40;
select * from test;
savepoint a;
delete test where deptno=30;
select * from test;
savepoint b;
rollback to a;
select * from test;
数据库备份
从物理与逻辑的,备份可以分为物理备份和逻辑备份。
物理备份:对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(RMAN)或操作系统命令进行数据库的物理备份。
逻辑备份:对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的EXP,数据泵(EXPDP),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份
从数据库的备份角度,备份可以分为完全备份和增量备份和差异备份
完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。
增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。
差异备份:备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,因此只需要两份数据---最后一次完整备份和最后一次差异备份,缺点是每次备份需要的时间较长。
1、Rman(物理备份):针对 数据库,表空间,数据文件,数据块,这种方案备份的速度很慢。通常在备份数据时候不建议备份在线日志文件,其他文件都可以备份
2、exp,expdp(逻辑备份):针对 用户,数据库对象(表,分区...),这种备份方案对数据的完整性保证不是很好
1-rman
一、首先做数据库的归档操作(只需归档一次):
1、sqlplus sys/密码 as sysdba; 
2、关闭数据库,开启成mount模式: 
shutdown immediate; 
startup mount; 
3、开启日志归档,并且开库后启用自动归档: 
alter database archivelog; 
alter database open; 
alter system archive log start; 
4、可以查看归档路径:show parameter DB_RECOVERY_FILE_DEST; 
5、查看归档状态:archive log list 
6、归档状态中archivelog:有enable就说明设置成功 
7、Exit;退出sys模式 
8、默认的存档空间是2G; 
查看存档空间大小:show parameter db_recovery_file_dest; 
修改大小:alter system set db_recovery_file_dest_size=100G; 
二、注意:已经设置好归档后每次备份从这里开始。 
Rman; 
connect target sys/密码 
backup database; 
2-export
备份:export  用户名/密码 file=用户名.dmp  导出该用户下的所有表
恢复: import  用户名/密码 file=用户名.dmp full=y(表示全部导入)
 import  用户名/密码 file=用户名.dmp tables=tt(表示导入tt表)
上一篇下一篇

猜你喜欢

热点阅读