Oracle数据库的常用操作总结

Oracle数据库的常用操作总结

先简单介绍一下oracle的体系结构
1、数据库database:指的是oracle数据库系统的服务端。
2、实例SID:每一个数据库在oracle里称为一个实例,这个实例有个唯一的名称叫sid.在实际的羡慕中一台服务器一般只有一个实例,多实例需要进行数据库的集群配置。
3、表空间: 一个表空间相当于mysql的一个数据库的概念,oracle是分配表空间,而mysql是新建数据库。
4、数据文件:数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或多个数据文件中。
5、用户:sys为系统管理员;system为一般管理员;还有一类是普通管理员,数据库自带的用户scott,hr,项目中使用的用户。
总结:一个oracle数据库可以创建多个数据库,每个数据库称为实例,在实例里可以分配多个表空间,每个表空间里可以创建多个数据表,而每个表空间里的表数据都存储在一个数据文件里,要查询表空间里的表数据就需要在实例下给表空间指定个用户,由用户来访问表空间里的表。
下面来介绍常用的操作:
1、创建表空间
创建表空间只有系统管理员才有权限,其他用户没有权限。
create  tablespace  haha          --创建表空间的名称
datafile 'c:\20171124.dbf'      --数据文件存储的路径
size  10m                                     ---文件大小
autoextend on                            --自动扩展
next 10;                                        --扩展大小
2、创建用户
create  user   xixi                    --用户名
identified  by  xixi                    --密码
default  tablespace  haha;    --默认表空间的名称
3、给用户授权
语法:  grant  权限/角色   to  角色
         Oracle中已存在三个重要的角色:connect角色、resource角色,dba角色
         connect角色: --是授予最终用户的典型权利,最基本的
                    alter  session ---修改会话
                    create  cluster --建立聚簇
                    create  database link --建立数据库连接
                    create  sequence  --建立序列
                    create  session --建立会话
                    create symonym  --建立同义词
                    create view  ---建立视图
         resource角色:---是授予开发人员的
                     create  cluster --建立聚簇
                     create  procedure  --建立过程
                     create  sequence  --建立序列
                     create  table ---建表
                     create   trigger ---建立触发器
                     create  type ---建立类型
         dba   最高级权限,相当于管理员的角色


grant   dba  to xixi;    
grant   create  session to xixi;
4、建表
  Oracle中存储的字段类型:
                数值:
                        int
                        bigint
                        double
                        number(v1,v2)--v1表示数值总长度,v2表示小数位数(推荐使用)
                 字符:
                        char-------定长
                        varchar---可变长度
                        varchar2----可变长度,中文和字符都是占2位(推荐使用)
                 日期:
                        date----yyyy/mm/dd  hh:mi:ss
                        datetime ---date+9 可以精确到秒后9秒,3位毫秒,6位微妙,9位纳秒
                 大字段:
                        clob
                                 4g----文本数据---文章
                        blod
                                 4g----二进制---小电影
                        long
                                 2g-----文本数据---文章
                         大字段我们一般不使用,但在存储大数据都输存储在公有云上。
     

create   table  person(
         pid  number(5),
         name  varchar2(10),
         gender  char(1),
         birthday date
)
5、维护表

--增加一列
alter table person add(address varchar2(20));
--修改列类型
alter table person modify(address varchar2(50));
--修改列名
alter table person rename column name to pname;
--删除列
alter table person drop column address;
--删除表
drop table person;
--修改表名
rename person to person1;

6、添加约束

--非空约束
alter table person modify (pname varchar2(20) not null);
--唯一约束
alter table person add constraint person_qu_pname unique  (pname);
--主键约束=非空+唯一
alter  table person add constraint person_pk_pid primary key(pid);
--检查约束
alter  table person add constraint person_ck_gender  check  (gender in (1,2,3));
--外键约束
/*
1、外键存在于子表中
2、外键的值一定是主表的主键
加入外键后,删除表时一定要先删除子表再删除主表,如果直接删除
主表会出现约束存在无法删除。但是可以加级联完成
*/
create table orders(
       oid number(10) primary key,
       oname varchar2(20) not null,
       oprice number(6,2)
);
create table order_detail(
       detail_id number(10) primary key,
       detail_name varchar2(20) not null,
       detail_price number(6,2),
       oid number(10)
);
/* 加入外键与级联删除*/
alter  table order_detail  add constraint detail_fk_oid
foreign key  (oid)  references orders(oid) on delete cascade;

7、视图

虚拟表,数据来源是实体表
         意义:
               权限粒度控制
               复杂sql简单化

--创建只读视图
create view per1 as select pname ,pid from person with read only ;
select * from per1;

8、序列

--实现主键自增
create sequence persion_pid;
select persion_pid.nextval from dual;
select persion_pid.currval  from dual;

9、索引

索引(用于数据量很大时的查询)
       索引的原理:
                   表里数据按索引字段从小到大排序
                   取出两个字段:索引字段(sal)和rowid
                   把这个结果集保存在一张特殊的表里---索引表
                   根据索引表创建一棵树(Btree)---二叉树
                   在查找是通过字段在二叉树中进行折半查找。

--创建索引,是在查询条件下创建的。
select * from emp where sal=1500;
create  index   emp_index_sal on emp(sal);
10、操作数据

--插入数据
insert  into person values(2,'哈哈',2,sysdate);
insert into person(pid,pname) select empno,ename from scott.emp;
select * from person;
--修改数据
update person set pname='嘻嘻' where pid=2;
--删除
delete  from person;
truncate table person;--删除表,再重新创建表。
11、查询

/*内连接
        1、隐式内连接:
                from   A,B where A.关联字段=B.关联字段
          2、显示内连接
                from   A   inner join B  on A.关联字=B.关联字
*/
select *   from emp,dept  where emp.deptno=dept.deptno;
select  *  from emp  inner join dept  on  emp.deptno=dept.deptno;

/*
外连接
1、左外连接
        from  A  left join B on A.关联字=B.关联字
        以左表为基准,全部显示,以右表作为补充表。   
2、右外连接
        from  A  right  join B on A.关联字=B.关联字
        以右表为基准,全部显示,以左表作为补充表。
3、Oracle的外连接特殊写法:
        在补充显示表后添加(+)
         from   A,B where A.关联字段=B.关联字段(+)
*/
select *  from dept left join emp on dept.deptno=emp.deptno;
select *  from dept right join emp on dept.deptno=emp.deptno;
select *  from dept,emp where dept.deptno=emp.deptno(+);

/*
子查询(子查询通常用于,子查询里面的表是小表,外面是大表)
       在一个子查询语句中嵌套了另一个查询语句(多个)
       意义:
               1、优化sql查询---性能
               2、多条sql简单化---功能
        语法:
        from A,(查询语句) B where A.关联字段=B.关联字段
        from  A   where  a  表的字段   in   B 表的字段
*/
--1、查询是领导的所有员工信息
select  * from emp where empno in(select mgr from emp);
--2、.列出至少有三个员工的所有部门和部门信息。
select d. * 
from dept d,(select  deptno, count(*)  c from emp group by deptno ) e
where d.deptno=e.deptno and e.c>=3;4


/*
exists---存在
语法:
        from A  where exists(子查询)
                子查询有结果集,则exists表达式为真。
                子查询没有结果集,则exists为假
*/
--查询有员工的部门信息
select * from dept d where exists(select deptno from emp e where e.deptno=d.deptno)

--oracle中的分页(第二页,每页5条记录)
/*
rownum原理
1、执行查询语句,返回结果集
2、取出第一行数据,增加一列rownum,赋值为1
3、条件判断,如果不满足条件则抛弃该行,如果满足条件则返回该行
4、继续取下一行,生成rownum
5、重复执行第三步
*/
select  *  from (select rownum  rn,t.empno,t.ename,t.sal  from(select * from emp order by sal desc) t
where rownum<11)where  rn>5;
集合运算中的关键字

并集: union/union all

交集 :  intersect

差集: minus



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值