二、Oracle的结构学习

    1.结构
        数据库-->数据库实例(ORCL)-->表空间(用户里面的创建表)-->文件
    2.创建表和删除空间
        创建语法:
            create tablespace 表空间的名称
            datafile '文件的路径(服务器上的)'
            size 大小
            autoextend on 自动扩展
            next 每次扩展的大小
        例:
            create tablespace handong
            datafile 'c:\handong.dbf'
            size 100m
            autoextend on 
            next 10m;
        删除表空间:
            drop tablespace 表空间名称
        例:
            drop tablespace handong;
        注意:
            创建表空间时要切换到系统账户
            删除表空间时要先执行删除语句,但磁盘上文件还是有的,磁盘文件需手动删除
    3.创建用户并授予权限(在系统账户中创建)
        语法:
            create user 用户名
            indentified by 密码
            default tablespace 表空间的名称;
            grant 角色|权限 to 用户名;
        例:
            create user dakang
            indentified by dakang 
            default tablespace handong;
            grant dba to dakang;
        角色|权限相关:
            Oracle中已存在三个重要的角色:connect角色,resource角色,dba角色
                connect角色:是授予最终用户的典型权力,最基本的
                    alter session --修改会话
                    create cluster --建立聚簇
                    create database link --建立数据库链接
                    create sequence --建立序列
                    create session --建立会话
                    create synonym --建立同义词
                    create view --建立视图
                resource角色:--是授予开发人员的
                    create cluster --建立聚簇
                    create procedure --建立过程
                    create sequence --建立序列
                    create table --建立表
                    create trigger --建立触发器
                    create type --建立类型
                dba角色:拥有全部特权,是系统的最高权限,只有dba才可以创建数据库结构,并且系统权限也需要dba授出,且dba用户可以操作全体用户的任意表包括删除
    4.表的约束
        主键约束:primary key
        非空约束:not null
        唯一约束:unique
        检查约束:check()
        外键约束:
            添加外键约束:
                alter table product add foreign key(cno) reference category(cid);
            强制级联删除:先删除外键约束,然后删除自己(不好)
                drop table category cascade constaint;
            添加外键约束,使用级联约束,在删除的时候,使用级联删除
                alter table product add foreign key(cno) reference category(cid) on delete cascade;
            级联删除:首先去从表中找有没有关联数据,如果在从表中有关联数据,先删除从表中的数据,然后再删除表中的数据
                delete from category where cid=2;
    5.子查询插入数据
        insert into emp1 select * from emp where dptno=10;
    6.delete和truncate的区别
        delete:DML、逐条删除、支持事务操作
        truncate:DDL、先删除表在创建表、不支持事务操作、执行效率要高
    7.视图
        是对查询结果的一个封装
            视图里面的所有的数据,都是来自于它查询的那张表,试图本身不存储任何数据
        能够封装复杂的查询结构
        屏蔽表中的细节
        语法:
            create [or replace] view 视图名称 as 查询语句 [with read only]
        注意:
            通常不要通过视图去修改,视图创建的时候,通常要加上with read only
        例:
            create or replace view view_test1 as select ename,job,mgr from emp with read only;
        同义词:synonym
            create synonym dept for view_test1;
    8.序列
        生成类似于auto_increment这样ID自动增长 1,2,3...
        auto_increment这个是mysql的
        语法:
            create sequence 序列名称
            start with 从几开始
            increment by 每次增长多少
            maxvalue 最大值| nomaxvalue
            minvalue 最小值| nominvalue
            cycle | nocycle 是否循环
            cache 缓存的数量 | nocache
        例:
            create sequence seq_test1
            start with 1
            increment by 2
            maxvalue 30
            cycle
            cache 10;
        如何从序列中获取值
            currval:当前值
            nextval:下一个值
        注意:    
            currval 需要在nextval调用之后再调用
        例:
            select seq_test1.nextval from dual;
            select seq_test1.currval from dual;
    9.索引 (原理:平衡二叉树)
        相当于一本书,能够提高我们的查询效率
        如果某一列,经常用来作为查询条件,那么有必要创建索引,在数量比较多的情况下
        语法:    
            create index 索引的名称 on 表名(列);
        例:
            create index ind_wubaiwan on wubaiwan(name);
        创建复合索引
            create index ind_wubaiwan on wubaiwan(name,address);
        注意:
            主键约束自带主键索引,唯一约束自带唯一索引
    10.PLSQL入门
        Procedure Language 过程语言,Oracle对SQL的一个扩展
            语法:
                declare
                    --声明变量
                    变量名 变量类型;
                    变量名 变量类型 := 初始值;
                    例:
                        vsal emp.sal%type; --声明引用型的变量
                        vrow emp%rowtype; --声明记录型变量
                begin
                    --业务逻辑
                end;
            
                dbms_outputput.put_line(); --相当于java的System.out.println();
            例:
                declare 
                    i varchar2(10) := '张三';
                begin 
                    dbms_output.put_line(i);
                end;
                
                --查询7369号员工的工资,并打印出来
                    declare 
                        vsal emp.sal%type;
                    begin
                        --将查询结果赋值给vsal
                        select sal into vsal from emp where empno=7369;
                        dbms_output.put_line(vsal);
                    end;
                
                --查询7369号员工的信息
                    declare 
                        vrow emp%rowtype;
                    begin
                        select * into vrow from emp where empno=7369;
                        dbms_output.put_line(vrow);
                    end;
        PL条件判断
            语法:
                if then
                elsif then
                else
                end if;
            例:
                --根据不同的年纪,输出相关的内容
                    declare
                        age number := &aaa; --可以控制台输入,控制台输入付给aaa,aaa 赋给age
                    begin
                        if age < 18 then
                            dbms_output.put_line('小屁孩');
                        elsif age >= 18 and age < 24 then
                            dbms_output.put_line('年轻人');
                        elsif age > 24 and age < 45 then
                            dbms_output.put_line('中年人');
                        else
                            dbms_output.put_line('老年人');
                        end if;
                    end;
        PL循环
            语法:    
                while循环
                    while 条件 loop
                    
                    end loop;
                for循环
                    for 变量 in[reverse] 起始值..结束值 loop
                    
                    end loop;
                loop循环
                    loop 
                        exit when 条件 
                    end loop;
            例:
                --输出1~10
                while循环
                    declare
                        i number := 1;
                    begin
                        while i <= 10 loop
                            dbms_output.put_line(i);
                            i := i+1;
                        end loop;
                    end;
                for循环
                    declare
                    
                    begin
                        for i in 1..10 loop
                            dbms_output.put_line(i);
                        end loop;
                    end;
                loop循环
                    declare 
                        i number := 1;
                    begin
                        loop 
                            exit when i > 10
                                dbms_output.put_line(i);
                                i := i + 1;
                        end loop;
                    end;

猜你喜欢

转载自www.cnblogs.com/QQ1171492144/p/10654210.html