Oracle数据库的基础使用
作者:网络转载 发布时间:[ 2016/11/11 9:51:54 ] 推荐标签:数据库 Oracle
oracle 是目前流行的数据库,中文注册商标是 甲骨文
基础概念:
数据库:存储数据的数据库,Oracle一般只有一个全局数据库 XE,ORCL。
表空间:是Oracle存储数据的地方,由若干个数据文件组成,*.dbf。
模式和模式对象:模式是用户,模式对象是数据库对象的集合,比如表、视图、索引、存储过程。
卸载Oracle的注意事项:
0:需要先备份重要数据
1:得合法删除(通过程序自带的卸载工具卸载,如360,程序和功能)
2:卸载完成后,需要手动移除安装文件夹
3:查看系统服务,如果有Oracle开始的服务,删除服务
打开服务快捷方式:window+R(services.msc)
安装Oracle的注意事项:
1.安装目录中不能有中文目录,好不要有空格
2.好不要安装到系统盘,怕数据丢失
Oracle:8i/9i-->Oracle10g/11g-->Oracle12C
版本:
企业版 (enterprise Edition)
个人版 (Express Edition)
占用端口号:1521 和 8080 ,tomcat换端口号,否则登录Oracle数据库
SSH:Struts+Spring+Hibernate
SSI:SpringMVC+Spring+IBatis
配置监听器:
Oracle..Listener
OracleService<SID>
如何配置监听器:主机名和listener里的不一样
Oracle的基本概念:
1.数据库:存储数据的仓库,数据一般只有一个(个人版XE,企业版orcl)
2.用户(模式 schema):Oracle是通过不同的用户来区分数据库对象
3.模式(用户/数据库)对象:指的是这个用户所拥有的表/视图/索引/过程...
4.表空间:是Oracle存储数据的地方,一个表空间对应一个或者多个的数据文件*.dbf
如何登陆Oracle数据库
1.pl/sql developer
sqlplus:
系统用户:sys(只能以sysdba,sysoper的身份登陆) system(normal身份)
登陆/切换用户的sql命令:conn 用户/密码 [as sysdba];
Oracle 的sql应用
1>查询不重复的列值:stuName,stuAge()
select distinct stuName,stuAge from student;
select stuName,stuAge from student group by stuName,stuAge having count(1)=1;
2>如何起别名?(空格 或者 as)如何排序?如何添加条件?
select stuName as 姓名,stuAge as "年 龄" from student;
order by 列名 asc | desc;
where
3>如何根据现有表创建一个新表
create table 表名
as
select * from student[where 1=2];
创建新表并添加一列
create table 表名
as
select s.*,'T113' as cname from student s;
常用的sql命令:
1.show user:显示当前登录的用户 中括号里的超级管理员才加
2.conn 用户名/密码[as sysdba]:切换用户,登录数据库
3.desc :描述表结构
在Oracle中增删改语句会自动开启事务,必须提交事务
查看表:
select * from 表名;
查看表结构:
desc 表名;
sql语句的分类:4类
数据操纵语音(DML):insert update delete select
事务控制语音(TCL):commit rollback savepoint
数据定义语音(DDL):create drop alter truncate
数据控制语音(DCL):grant revoke
在editor中编辑,点击齿轮运行:么事别乱敲回车,check约束可以直接写,选tables可以直接添加数据
失效后,更改:
tools-->pre..-->key conf..-->reset to default-->ok
Oracle常用的数据类型有哪些?
char varchar2 number date lob(blob clob)
标准日期格式:(1-6月 2016) to_date(2016-6-1,'yyyy-MM-dd')date'2016-6-1' 或者直接编辑 选择myobject,tables ,edit data
分析函数:rank() over (partition by 列名 order by 列名 )
查询平均工资大于3000的部门
/*select * from dept d
where (select avg(sal) from employee e where e.deptno = d.deptno)>3000;*/
创建表空间注意事项:
1.数据文件不要放在容易看到和删除的地方(比如桌面,磁盘根目录)
2.表空间不能非法删除,否则数据库无法启动
修改表空间大小:
1.修改数据文件大小
alter database datafile
'd:datad.dbf'
resize 10M;
2.添加数据文件
alter datafile
'd:datad2.dbf'
size 5M
autoextend on;
3.修改表空间为只读状态
alter tablespace hello read only;
alter tablespace hello read write;
删除表空间
drop tablespace hello
including contents and datafiles;连带文件夹和数据一同删除
创建用户
create user zhao
identified by sa
default tablespace hello;
privilege 权限
expire:密码定期过期
授权:
系统权限:
grant connect,resource to zhao;
revoke connect,resource from zhao;
grant create synonym to zhao;
grant create public synonym to zhao;
grant select on dept to public;
对象权限:
grant all on emp to zhao;
revoke all on emp from zhao;
创建序列:
create sequence seq_dept
start with 50
increment by 10;
1.添加数据
insert into dept(列名) values (seq_dept.nextval);
2.查看当前序列值
select seq_dept.currval from dual;
3.drop sequence 名
创建同义词:在其他用户中创建Scott的同义词;
create or replace synonym emp for Scott.emp;
创建公有同义词:表是谁的谁创建(前提条件,其他用户得有权限访问同义词对应的对象)
create public synonym emp for Scott;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
查询工资总额大于1000的部门信息(2种方式)
1. 分组:
select * from dept
where deptno in (select deptno from emp group by deptno having sum(sal) > 1000)
2. 子查询
select * from dept d
where (select sum(sal) from emp e where e.deptno=d.detpno) > 1000;
--删除数据库不删除结构
/*truncate table dept;*/
--查询所有
/*select * from dept;*/
--添加列
/*alter table dept add(looc varchar2(10));*/
--删除列
/*alter table dept drop column looc;*/
--添加数据
/*insert into dept values('40','accp4','邯郸4');*/
--选择无重复的数据查询
/*select distinct dname,loc from dept;*/
--升序排列
/*select * from dept order by loc ASC;*/
--降序排序
/*select * from dept order by loc DESC;*/
--用别名显示
/*select depton as '学号', dname as '课程', loc '地区', FROM dept;*/
--复制个表出来吧数据,和结构,复制过来
/*create table dept2
as
select * from dept;*/
----复制个表出来不复制数据,只结构,复制i过来
/*create table dept3
as
select * from dept where 1=2;*/
--查看表中的函数
/*select count(1) from dept;*/
--查看表中的函数(效率低)
/*select count(*) from dept;*/
--取出列不重复的数据
/*select dname,loc
from dept
group by dname,loc
having(count(dname||loc)<2);*/
--事务控制语句
--commit 提交事务
--rollback 回滚事务
--savepoint 在事务中创建节点
-----------------------------
/*commit;
insert into dept2 values('01','accp01','邯郸01');
/*savepoint a;
insert into dept values('4000','accp400','邯郸400');
rollback to savepoint a;
select * from dept;
;
select * from dept;**/
------------------------------
--分页查询
/*SELECT *
FROM (SELECT e.*,rownum rn
FROM (SELECT *
FROM employee
ORDER BY sal DESC
) e
)
WHERE rn>=5 AND rn<=9;*/
-------------------------
--SQL操作符
--1.算数操作符号 +-*/加减乘除
--2.比较运算符 = <= >= AND IN LIKE
--3.逻辑运算符 or and not 或者,和,非
--4.集合操作符 nuion(联合) unionall(联合所有) intersect(交集) minus(减级)
--union 联合查询两个(不重复)的数据
/*select * from dept
union
select * from dept2;*/
--union联合查询排序
/*select loc from dept
union
select loc from dept2
order by loc;*/
--union all 查询所有的数据
/*select * from dept
union all
select * from dept2;
*/
--intersect 交集 返回两个都有的行
/*select * from dept
intersect
select * from dept2;*/
--minus 查询第一个中在第二个里面没有的行
/*select * from dept
miuns
select * from dept2;*/
--链接操作符
--链接运算符||用于将两个或者多个字符串合并成一个字符串,或者将一个字符与一个数值合并在一起
/*select dname||'_'||loc from dept;*/
--主键
/*alter table dept
add constraint depton PRIMARY KEY (depton);*/
--自增
--sql函数
--to_char把时间转换为varchar2数据
/*select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"HH24:MI:ss')from dual;*/
--将数值转换为字符串并且用货币当为前缀
/*select to_char(1210.7,'$9,999.00') from dual;*/
/*select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"hh:mi:ss') from dual;*/
/*select to_char(1200.2,'$9,999.00') from dual;*/
/*select to_char(sysdate,'YYYY"年"fmMM"月"fmDD"日"HH24:MI:SS') from dual;
select to_char(123.1,'$9,999.00') from dual;*/
--将char varchar2转换为日期函数
/*select to_date('2017-01-01','yyyy-mm-dd') from dual;*/
--nvl 的用法如果money2是个null 那么什么和它想加都是null了,nvl意思是如果money2是个null把它换成0
--select stuname,money+nvl(money2,0) from stuinfo;
--判断money2如果money2不是null返回money+money2,如果是null返回money.
/*select stuname,nvl2(money2,money+money2,money) from stuinfo;*/
--转换date和java中的switch语句条件如果是01是一月 如果02二月 else是后十月
/*select decode(to_char(day,'fmmm'),'01','一月','02','二月','后十月') from stuinfo;*/
--插入数据
/*insert into emp values(1111,'雷老虎','管理',2,to_date('1991-01-02','yyyy/mm/dd'),1000,1000,12);*/
-----------------------------------------------------
--分析函数
--rank
/*select empno,ename,sal,DENSE_rank() over(order by sal desc) as 排名 from emp;*/
/*select empno,ename,sal,ROW_NUMBER() over(order by sal desc) from emp;*/
---------------------------------------------------------------------------
--SQL综合练习
--显示员工的职年度
--使用round对年份四舍五入
/*select empno,ename,hiredate, to_char(round(hiredate,'mm'),'YYYY')||'年份' from emp;*/
--列出只有3个雇员的部门having 是在group by 后面使用
/*select deptno,count(1)from emp
group by deptno
having count(1)>3;
*/
--查看是不是后入职的
/*select ename, hiredate,last_day(hiredate) from emp where hiredate=last_day(hiredate);*/
--创建个表空间
/*create tablespace EPET
datafile'D:orcaleappOracleoradataXEEPET.DBF'
size 5m
autoextend on;*/
--删除表空间数据文件需要手动删除
/*drop tablespace EPET;*/
--删除表空间数据文件一起删除
/*drop tablespace EPET including contents and datafiles;*/
--修改表空间的大小 改变数据文件的大小
/*alter database
datafile 'D:orcaleapporacleoradataXEEPET.DBF'
resize 10m;*/
--表空间只读
/*alter tablespace EPET read only;*/
--表空间可读可写
/*alter tablespace EPET read write;*/
--创建用户
/*create user li
identified by yapeng
default tablespace epet;--默认表空间*/
--删除用户
/*drop user li cascade;*/
--用户授权
/*grant resource to li;*/
--撤销权限
/*revoke resource from li;*/
--授权查询
/*grant select on emp to li;*/
--序列
/*create table toys
(
toyid number not null,
toyname varchar2(10),
toydate date
);*/
/*create sequence se
start with 0
increment by 1
maxvalue 2000
nocycle
cache 30; */
/* insert into toys (toyid,toyname,toydate)
values(se.nextval,'李逵',to_date('2012/01/01','YYYY,MM,dd')); */
--查看当前序列的值
/*select se.currval from toys;
*/
--更改序列
/*--dba给予创建同义词权限
grant create synonym to T111;*/
--创建同义词
/*create or replace synonym emp for system.emp;*/
--dba给予创建公共同义词权限
/*grant create public synonym to system;*/
--创建公共同义词
/*create or replace public synonym d for emp;*/
--把查询权限给所有人
/*grant select on emp to public;*/
--查看用户有哪些同义词
/*select * from user_synonyms;*/
--索引
--1:B树索引 是Oracle的标准索引用于数值,适用于高基数列
--2: 反向键索引,主要解决IO瓶颈问题的
--3:位图索引用于取值较少的(主键不适合)
--表分区范围分区
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11