Day61 Oracle数据库(三)

本文围绕Oracle数据库展开,详细介绍了创建表空间、用户、表,修改表结构,设置列约束,创建视图、序列、索引等操作的语法和示例。同时,还讲解了PLSQL编程,包括循环语法和条件判断,让开发者能像在Java中一样编写逻辑。

Oracle 体系结构 :   数据库 --> 数据库实例ORCL --> 表空间(用户里面创建表) --> 数据文件

一.创建表空间

  1. 表空间 :  逻辑单位,通常我们新建一个项目,就会去新建表空间,在表空间中创建用户来创建表
  2. 语法:
            create tablespace  表空间的名称
            datafile  '文件的路径(服务器上)'
            size  大小
            autoextend  on  自动扩展
            next  每次扩展的大小
  3. 切换到system账号下创建
    1. 创建一个表空间
      create tablespace mytable
      datafile 'c:\mytable.dbf'
      size  100m
      autoextend  on
      next 10m;
    2. 删除表空间
      drop tablespace mytable;

二.创建用户

  1. 创建用户
    1. 语法
      create  user  用户名
      identified  by  密码
      default  tablespace  表空间的名称
    2. 举例
      create  user  zhangsan
      identified  by  zhangsan
      default  tablespace  mytable;
  2. 授权 
    角色分类:  connect
    1. 语法
      qrant  角色 |  权限  to  用户
    2. 举例
      qrant  connect  to  zhangsan;

三.创建表

  1. 创建表
    1. 语法:
      create  table  表名(
             列名     列的类型 {列的约束},
             列名     列的类型 {列的约束}
      );
    2. 列的类型
      varchar
      varchar2(长度)    可变字符长度
      char(长度)           固定长度字符
      number(总长度,小数长度)         数字类型   -- 小数长度不能大于等于总长度
      date                     年月日时分秒
      timestamp            时间戳,比date类型更加精确
      LONG/CLOB    :  存放一本小说
      BLOB               :  存放电影   Java 存进去,再读取出来
  2. 使用子查询的方式创建表
    1. 语法:
      create  table  表名  as  查询语句;
      注意 :  只会复制表结构和表中的数据,不会复制列的约束
                 如果查询语句有结果,就是复制 表结构和数据
                 如果查询语句没有结果,就是复制  表结构
    2. 举例
      create  table  emp  as  select  *  from  scott.emp;

四.修改表

  1. 修改表
    1. 操作:
      添加列
      修改列
      删除列
      修改列名
      重命名表
    2. 举例
      create  table  stu(
              stuid  number,
              sname  varchar(10)
      );
  2. --添加一列
    alter  table  stu  add  phone  varchar2(11);
    添加多列
    alter  table  stu  add  ( mobile  varchar2(11) , sex  varchar2(2) );
    --修改列的类型
    alter  table  stu  modify  sex  varchar2(4);
    --修改列名
    alter  table  stu  rename  column  sex  to  gender;
    --删除列
    alter  table  stu drop  column  gender;
    --修改表名
    rename 
    stu  to  student;
    --删除表
    drop  table  student;

五.列的约束

  1. 列的约束
    1. 分类 : 五大约束  , 前四个是单表约束
      -1- 主键约束:  primary  key  不能为空,必须唯一
      -2- 非空约束:  unique
      -3- 唯一约束:  not  null
      -4- 检查约束:  check(条件)    在mysql中是可以写的,但是mysql直接忽略检查约束,写是没有意义的
      -5- 外键约束: 
    2. 举例:
      create  table  student(
               stuid  number  primary  key,
               sname  varchar2(10)  unique,
               age  varchar2(10)  not  null,
               gender  varchar2(4)  check( gender  in  ('男','女'))
      );
      添加外键约束, 创建一个商品表和一个商品分类表
      alter  table  product  add  foreign  key(cno)  references  category(cid);
  2. 外键约束强制删除和级联删除
    1. 强制删除有外键的表  : 先删除外键关联表的外键约束,然后再删除自己
      drop  table  category  cascade  constraint;
    2. 级联删除:  添加外键约束,使用级联约束
      alter  table  product  add  foreign  key(cno)  references  category(cid)  on  delete  cascade;
       

六.视图

  1. 概念 :  是对查询结果的一个封装 , 视图里面所有的数据,都是来自于它查询的那张表,视图本身不存储任何数据
     -1-  能够封装复杂的查询结果
     -2-  屏蔽表中的细节
    注意: 通常不要通过视图去修改,视图创建的时候,通常要加上with  read  only
  2. 语法 :
           create  [or replace]  view  视图的名称  as  查询语句  [with  read  only]
  3. 创建一个视图
    create  or  replace  view  view_test1  as  select  ename,job,mgr  form  emp;
    查看视图
    select * from  view_test1;
    通过视图修改数据
    update  view_test1  set  ename='SMITH2'  where  ename = 'SMITH';
  4. 同义词
    create  synoym  dept  for  view_test3;

七.序列

  1. 概念: 生成类似于 auto_increment 这种ID自动增长 1,2,3,4,5...
  2. 语法:
             create  sequence  序列的名称
             start  with  从几开始
             increment  by  每次增长多少
             maxvalue  最大值  |  nomaxvalue
             minvalue  最小值   |   nominvalue
             cycle  |  nocycle  是否循环
             cache  缓存的数量  |  nocache
  3. 如何从序列中获取值
             currval  :  当前值
             nextval  :  下一个值
                     注意:  curral  需要在调用nextval之后才能使用
    select  seq_test1.nextval  from  dual;
    select  seq_test1.currval  from  dual;
  4. 序列用的最多的一种写法
    create  sequence  seq_test2;    //其他的值都是默认
    select  seq_test2.nextval  from  dual;

八.索引

  1. 概念 :  相当于是一本书的目录, 能够提高查询效率
          如果某一列,经常用来作为查询条件,那么就有必要创建索引,数据量比较大的情况下
  2. 语法:
             create  index  索引的名称  on  表名(列)
    注意:  主键约束自带主键索引,唯一约束自带唯一索引
  3. 建立索引优化:
         cost                CPU调用次数
         Cardinality      影响行数
  4. 索引原理:   btree          balance  tree  平衡二叉树
    如果某列作为查询条件的时候,可以提高查询效率,但是修改的时候,会变慢

九.PLSQL编程

  1. Procedure  Language  过程语言  Oracle对SQL的一个扩展
    让我们能够像在java中一样写if else  elsif 条件,还可以编写循环逻辑 for  while
  2.  
    1. 循环语法
      declare
              --声明变量
              变量名  变量类型;
              变量名  变量类型  :=  初始值;
                  vsal  emp.sal%type;    ---- 引用型的变量
                  vrow emp%rowtype;    ----声明记录型变量
      begin
               --业务逻辑
      end;
    2. PL条件判断    属于业务逻辑.
      if  then
      elsif  then                 //elsif  定义就是这样
      else 
      end if;
  3. 举例:
    1. declare 
            i  varchar2(10)  :=  '张三';
      begin
           dbms_output.put_line(i);           //相当于java中的syso
      end;
    2. declare 
           vsal  emp.sal%type;
      begin
          --将查询出的结果赋值给vsal
           select  sal  into  vsal  from  emp  where  empno = 4399;
           dbms_output.put_line(vsal);  
      end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值