• sql总结-----数据表操作


    数据表概述

    表示一种最常见的组织数据的方式,一张表一般有多个列(即多个字段)。

    oracle提供了多种内置的列的数据类型,常用的有以下五种:

    1、字符类型
    字符数据类型用于声明包含字母、数字数据的字段。对于字符数据类型细分又可以分为两种:
    他们分别对应,CHAR数据类型以及CHAR2数据类型。
    
    CHAR数据类型:
    用于存储固定长度的字符串,当为该列的某个单元格赋值小鱼长度的数值后,空余部分oracle会用空格自动填充;
    如果字段保存的字符长度,大于规定的长度,则,oracle会产生报错信息。
    CHAR类型的长度范围为1-2000个字节。
    CHAR2数据类型:
    用于存储变长而非固定字长的字符串。
    
    2、数值数据类型
    数值数据类型用于存储带符号的整数或浮点数。
    oracle中的NUMBER数据类型具有精度(precision)和范围(SCALE)两个参数。
    
    3、日期时间数据类型
    oracle提供的日期时间数据类型是DATE,他可以存储日期和时间的组合数据。
    
    4、LOB数据类型
    LOB数据类型用于大型的,未被结构化的数据,
    例如二进制文件、图片文件和其他类型的外部文件。LOB数据类型分为BLOB、CLOB和BFILE等三种。
    
    5、ROWID数据类型
    被称为“伪列类型”,用于在oracle内部保存表中的每条记录的物理地址。

    如果用户在自己的模式下创建一个表,则用户必须具有create table的系统权限;

    如果要在其他用户模式下创建表,则必须具有create any table的系统权限。

    创建数据表

     1、创建一个学生档案信息表

    create table students(
    stuno number(10)not null,        --学号
    stuname varchar2(8),             --姓名
    sex char(2),                     --性别
    age int,                         --年龄
    departno varchar2(2) not null,   --系别编号
    classno varchar2(4) not null,    --班级编号
    regdate date default sysdate     --建档日期
    );
    

    使用describe命令查看数据表的数据结构

    SQL> describe students;
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     STUNO                                     NOT NULL NUMBER(10)
     STUNAME                                            VARCHAR2(8)
     SEX                                                CHAR(2)
     AGE                                                NUMBER(38)
     DEPARTNO                                  NOT NULL VARCHAR2(2)
     CLASSNO                                   NOT NULL VARCHAR2(4)
     REGDATE                                            DATE
    

    使用create table as select命令创建表副本:

    create table students_2 as select * from students;
    

    维护数据表

    创建数据表后,如果对表的定义有不满意的地方,可以进行修改。普通用户只能对自己模式中的表进行修改,如果要对任何模式中的表进行修改,则必须具有alter any table的系统权限。

    1、增加和删除字段

    用户可以用alter table --- add语句向表中添加字段。

    alter table students add (province varchar2(10));
    

    用户可以用alter table --- drop语句删除表字段。但是,不能删除所有的字段,也不能删除sys模式中任意表的字段。

    如果仅需要删除一个字段,则必须在字段前指定column关键字。

    alter table students drop column province;
    #一条语句删除多个列
    alter table students drop (age,sex);
    

    2、修改字段

    修改字段 通常使用alter table modify语句。

    用户在修改字段时,并不可以随意修改;

    在有数据的情况下,把某种数据类型改为兼容的数据类型时,只能把数据的长度从低向高修改,而不能从高向低修改,否则会出现数据溢出的情况。

    alter table students modify stuno number(20);
    

    3、重命名表

    用户只能对自己模式下的表进行重命名,重命名表通常使用alter table xxx rename to XXX语句。

    alter table students rename to students_2;
    

    在对表的名称进行修改时要格外谨慎。虽然oracle可以自动更新数据字典中的外键、约束定义以及表关系,但是他不能更新数据库中的存储过程、客户应用,以及依赖该对象的其他对象。

    4、删除表

    一般情况下用户只能删除自己模式下的表,如果要删除其他模式下的表,则必须具有drop any table的权限。

    语法格式:

    drop table table_name [cascade constraints];

    如果该表存在约束、关联的视图和触发器等,则必须使用cascade constraints参数才能将其删除。

    当时用delete语句进行删除时,只删除数据不删除表结构;drop语句会删除数据以及表结构。

    一般情况下,当某个表被删除,它并没有被彻底删除,而是进入回收站中(依然占用存储空间),可以使用flashback table语句进行还原。

    drop table students_2;
    select * from students_2;
    select object_name,original_name from recyclebin where ORIGINAL_NAME = 'students_2'---查看表是否在回收站
    flashback table students_2 to before drop;
    

    如果用户想在删除表时立即释放空间,并且不放在回收站,则可以使用以下语句:

    drop table table_name purge;
    

    5、修改表状态

    用户可以将表置于read only状态,处于该状态的表不能执行DML和某些DDL操作。在11g之前,为了使某个表置于只读模式,只能将整个表空间置于read only状态。

    alter table students read only;
    alter table students read write;
    

    可以通过数据字典user_tables查询表的状态,

    select table_name,read_only from user_tables where table_name='STUDENTS';
    

    数据完整性与约束性

  • 相关阅读:
    kettle处理未发现hadoop插件问题
    文档公式编辑神器-Snip
    hive -e执行出现「cannot recognize input near '<EOF>' in select clause」问题
    hive从本地导入数据时出现「Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask」错误
    K-Means算法的Python实现
    kettle并行运行时出现「Unknown error in KarafBlueprintWatcher」
    初识 Kafka Producer 生产者
    一次 RocketMQ 进程自动退出排查经验分享(实战篇)
    再谈 RocketMQ broker busy(实战篇)
    RocketMQ 升级到主从切换(DLedger、多副本)实战
  • 原文地址:https://www.cnblogs.com/jinyuanliu/p/10428137.html
Copyright © 2020-2023  润新知