• 二、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;
  • 相关阅读:
    前缀和
    hdu6290奢侈的旅行
    make_pair
    New Year and Buggy Bot
    STL next_permutation 算法原理和自行实现
    前端面试题集合
    node设置cookie
    黑客与geek
    xss
    node async
  • 原文地址:https://www.cnblogs.com/QQ1171492144/p/10654210.html
Copyright © 2020-2023  润新知