• 跟我一起学Oracle 11g【5】Oracle中的表(一)


    前言

    表是最常用的模式对象,也是最重要的数据对象之一。甚至在很多时候,我们说到数据库操作,就以为对数据库中的表的操作,而忘记了还有很多其他的操作对象,比如试图、存储过程等等。表示存储数据的有效手段,因此对表的管理非常重要。还可以在表中定义约束,可以保证数据的有效性和完整性。

    一。创建表

    在Oracle数据库中,用户可以根据用户不同的需求创建不同类型的表,常用的表类型有如下:

    类型 说明
    堆表 数据按照堆组织,一无系方式存放在单独的表字段中,也是标准表,我们平常用的都是堆表。
    索引表 数据以B树结构,存放在主键约束所对应的索引段中    
    簇表 簇有共享相同数据库的一组表组成。在某些情况下,使用簇表可以节省存储空间。
    分区表 数据被划分为更小的部分,并且存储到相应的分区段中,每个分区可以独立管理和操作。

    1.1 数据类型

    数据类型

    参数

    描述

    char(n)

    n=1 to 2000字节

    定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)

    varchar2(n)

    n=1 to 4000字节

    可变长的字符串,具体定义时指明最大长度n,
    这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
    如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
    如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。
    可做索引的最大长度3209。

    number(m,n)

    m=1 to 38
    n=-84 to 127

    可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
    如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
    如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
    如:number(3,0),输入575.316,真正保存的数据是575。

    date

    从公元前471211日到公元47121231日的所有合法日期,

    long

    可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。

    raw(n)

    n=1 to 2000

    可变长二进制数据,在具体定义字段的时候必须指明最大长度nOracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
    raw是一种较老的数据类型,将来会逐渐被BLOBCLOBNCLOB等大的对象数据类型所取代。

    long raw

    可变长二进制数据,最大长度是2GBOracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
    在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOBCLOBNCLOB等大的对象数据类型所取代。

    blob
    clob
    nclob

    三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB
    LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
    可以执行读取、存储、写入等特殊操作。

    bfile

    在数据库外部保存的大型二进制对象文件,最大长度是4GB
    这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
    Oracle 8i可以读取、查询BFILE,但是不能写入。
    大小由操作系统决定。

    我也把这个整理了一份文档,在文章末尾的时候 可以把它download下来!~。

    1.2创建表的语法

    Create table [schema,] table_name(

    column_name data_type [default express] [constraint]

    [,column_name data_type [default express] [constraint]]

    [,column_name data_type [default express] [constraint]]

    );

    上面的一些解释,需要明白下[]表示这在创建表的时候是可选的。而没有[]这个东西表明在创建的时候 是必须要写的!~~~比方说[constraint] 这个给当前列加约束,那么约束是可以加或者不加的!

    Scheme:指定表所属的用户名或者所属的用户模式名称。

    table_name:顾名思义,就是表名。

    column_name:列名

    data_type:数据类型,就像在1.1中的写的。

    default express:默认值。

    constraint:添加列的约束,表示该列必须要满足的规则。

    比如:

    not null表示非空,就是这个字段不能为空。

    1.3查看表信息

    当我们创建了表之后,可以通过describe(简写desc)进行查看表的结构。如下:

    这个命令很有用,特别是在我们运用数据字典的时候,因为你刚开始不知道这个数据字典里的字段。

    当然,我们还可以通过查询数据字典试图user_tables 来查询表的有关信息!

    这个只是表明有这个表,那如果要查看表的结构呢,就像和desc一样呢?那么你可以用到user_tab_columns数据字典,如下:

    1.4指定表的模式

    在上面创建表的语法中,有一个是scheme的字段!~,它就是指定表的模式。用来表示所属的用户名或者所属的用户模式名称。如下图:

    1.4指定重做日志

    在创建表的时候,如果使用Logging字句,则表示对表的所有操作都将记录到重做日志中。

    接着,我们在数据字典里user_tables进行查看 是否果真如此,如下:

    当然你也可以使用nologging这个,表示不需要日志!~

    1.5指定缓存

    如果一个用户请求的数据是最近才开始使用的,那么这个数据最有可能存放在缓冲中。那么有人可能会问,在缓冲有什么好处呢?其实,好处是大大滴好。因为在缓冲的话,下次要在次读取数据的话,就不需要从磁盘中读了,直接从缓冲力拿 不是很方便吗?

    创建表的时候,可以用cache关键改变这种结果。 哦 对了,Oracle 是使用LRU(least Recently Userd)来管理缓冲的。如果在表的后面加上cache的话,那么Oracle在执行LRU的时候,就不会把这个表相关的数据给换出去。如图:

    二。修改表

    创建了表之后,那当然就需要对表进行维护咯!

    2.1增加和删除列

    ①增加列

    语法是:

    alter table 表名 add 列名 数据类型

    ②删除列

    语法如下:

    alter table 表名 drop column 列名

    你也可以同时删除几个,那么列名需要用()起来~~

    alter table 表名 drop column (列名1,列名2.。。)

    比如:alter table mybook3 drop column publicdata; 就把刚的那列删除了。

    2.2使用unused

    如果对一个表删除大量的数据,由于需要对每个列的记录进行处理,所以删除的速度可能会很慢。这个时候,我们可以使用关键字unused来代替这个操作!~啥意思呢?其实这在用户的角度来说,这个和删除是没有分别的,只是被标记为unused的字段依然留在数据库中,可以想象为被注释了,实质上空间并没有释放。

    语法:

    alter table 表名 set unused(列名);

    通过数据字典user_unused_col_tabs可以查看数据中的有哪些字段被标记为unused。

    当然 也可以删除这个标记,语法如下:

    alter table 表名 drop unused 列名

    2.2更新列

     有时候,我们创建了表之后,发现需要对一些字段进行修改,比如更新列名、列的数据类型、数字列的精度以及列的默认值等等。

    ①修改列名

    更新列的语法:

    alter table 表名 rename column 老的列名 to 新的列名

    ②修改列的数据类型

    在我们修改数据类型的时候,我想要注意2点:

    ☆在表里有数据的情况下,一般情况下我们无需把数据的长度由短向长的改变,为什么呢?很简单啊,会精度丢失呀!~但是你可以这么做,只是你要知道后果。

    ☆当表里没数据时,那就可以逆向进行改变了。

    语法如下:

    alter table 表名 modify 列名 新的数据类型

    修改列的精度 也是一样道理!

    ③修改列的默认值

    语法如下:

    alter table 表名 modify(列名 default 默认值)

    2.3重命名表

    语法:

    alter table 表名 rename to 新表

    这个很简单。

    NOTE;对表进行重命名很简单呢,但是不建议这样用。因为这样做的影响非常的大。虽然Oracle可以自动更新数据字典中表的外键、约束和表关系等,但是还不能更新数据库中的存储代码等等。所以,需要谨慎使用。

    2.4删除表定义

    如果用户需要删除所创建的表的定义,可以使用如下语法:

    drop table 表名 [cascade constraints | purge]

    我们需要知道的是删除表定义和删除表数据的区别,

    删除表定义,删除表的结构和数据都不存在。

    删除表数据,只是删除数据但是结构还在。

    在使用drop table语句的时候 ,可以使用如下2个参数:

    ★cascade constraints

    表示在删除表,不仅删除本表,而且删除所有应用这个表的试图、约束等等。因为有些表因为关系(比如外键,这个下个章节会说),所以删除不了,会提示有错,那这个时候你需要使用这个。

    我新建2个表:

    班级表:myclass

    学生表:

    ok,我们有了上面的环境之后,我们往2个表中随便插入一些数据。然后,我现在删除myclass表,结果如下:

    现在,我们把cascade constraints 这个加上,结果如下:

    ★purge

    表示在删除表定义之后,立即释放该表所占用的资源空间。

    语法

    drop table 表名 purge;

    好,今天先到这里哦!。

  • 相关阅读:
    线程
    进程2
    进程
    socketserver
    黏包
    初始网络编程
    模块
    super
    mro c3算法
    日志固定格式
  • 原文地址:https://www.cnblogs.com/damonlan/p/2610734.html
Copyright © 2020-2023  润新知