oracle入门07

    技术2022-05-20  39

    创建与管理表

      数据库中对象:有表、视图、索引、序列、同义词等。

    表:基本的数据存储的集合,由行与列组成

    视图:从表中抽出的逻辑上相关的数据集合。

    序列: 提供有规律的数值

    索引:提高查询效率

    同义词:给对象起的别名。

     

    Oracle数据库中的表

    1、 用户自定义表

    表名和列名的命名规范:

    l             必须以字母开头

    l             必须在 1–30 个字符之间

    l             必须只能包含 A–Z, a–z, 0–9, _, $, #

    l             必须不能和用户定义的其他对象重名

    l             必须不能是Oracle 的保留字

     

    创建表必须具备:

    l        必须具备:

    •     CREATE TABLE权限

    •     存储空间

    l       必须指定:

    •     表名

    •     列名, 数据类型, 尺寸

    创建表的语法

          CREATE TABLE [schema.]table

                 (column datatype [DEFAULT expr][, ...]);

     

    数据类型如下:

    数据类型       描述

    VARCHAR2(size)     可变长字符数据

    CHAR(size)    定长字符数据

    NUMBER(p,s)        可变长数值数据

    DATE      日期型数据

    LONG     可变长字符数据,最大可达到2G

    CLOB        字符数据,最大可达到4G

    RAW (LONG RAW)         原始的二进制数据

    BLOB       二进制数据,最大可达到4G

    BFILE        存储外部文件的二进制数据,最大可达到4G

    ROWID   行地址

       创建表的分析:

           在数据库中必须遵循一定的规范 这些规范称为范式.目前关系数据库有6种方式,数据库只需要满足3NF即可,需要使用范式对数据库中表进行处理.

     

      下面我以学生信息为例分析:

       学号,学生姓名,出生日期,学生性别,所属班级,所属院系,系主任姓名,课程编号,成绩.

      分析:

       学号:sid          数据类型 varchar2

       学生姓名:sname

       出生日期:sbirth    date

       学生性别:ssex      

       所属班级:sclass

       所属院系:sdep

       系主任姓名:dname

       课程编号:cid

       成绩 grade         number(5,2)

    创建学生信息表

    根据如上信息可以创建存储的表 学生信息表  包含医以上的全部信息,但非规范。

     

    分析设计过程:

           必须满足3NF范式 但前提必须满足12NF

    1、 属性不可再分(1NF) ==è一对多关系

    学生信息表:Sidsname,sbirth,ssex,sclass,sdep,dname

    成绩表: sid cid grade

    2、 (前提必须满足1NF )表中的所有非主属性都完全依赖于任一候选键。

    Sid->Sname

    sid->sbirth

    sid->ssex

    sid->sclass

    sdep->dname

    --à其他普通属性不应当存在部分依赖于主要属性->此普通属性应当被分离到新的表中去

    s(sid,sname,sbirth,ssex,sclass,sdep)

    d(sdep,dname)

    g(sid,cid,grade)

     

     

    3、 (前提满足2NF)表中的每一个非主属性都不传递依赖于任何候选键。

     

    s(sid,sname,sbirth,ssex,sclass,sdep)

    d(sdep,dname)

    g(sid,cid,grade)

     

    在满足2NF后 分析:

    Sid->sclass

    Sclass->sdep

    Sid->sdep

    s(sid,sname,sbirth,ssex,sclass)

    cd(sclass,sdep)

    d(sdep,dname)

    g(sid,cid,grade)

     

     

     

    2、 Oracle数据字典

     2.1查询用户自定义表

          //查询用户定义的表的名称

    SQL> select table_name from user_tables;

    //查询用户自定表的详细特征

    SQL> select * from user_tables

    //等效于

    SQL> select * from tabs;

     

    2.2查询用户定义的各种数据库对象

    SQL> select distinct object_type from user_objects;

    OBJECT_TYPE

    -------------------

    SEQUENCE

    TABLE

    INDEX

    2.3 查看用户定义的表、视图、序列和同义词

    SQL> select * from user_catalog;

     

    TABLE_NAME              TABLE_TYPE

    ------------------------------ -----------

    USESS                       TABLE

    ABC                          TABLE

    DEPT                        TABLE

    EMP                         TABLE

    SALGRADE                 TABLE

    PRODUCT_SEQ             SEQUENCE

    ORDERS_SEQ               SEQUENCE

    ORDERITEM_SEQ          SEQUENCE

    USERS                       TABLE

    PRODUCT                   TABLE

    ORDERS                     TABLE

    ORDERITEM                TABLE

    TMP                         TABLE

    PAGES                       TABLE

    STUDENT                   TABLE

    COURSE                     TABLE

    SC                            TABLE

    TEST                         TABLE

     

    18 rows selected

     

    用户自定表

     

     

    使用 ALTER TABLE 语句可以:

    l             追加新的列

    l             修改现有的列

    l             为新追加的列定义默认值

    l             删除一个列

     

    使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.

    追加

    ALTER TABLE table

    ADD                     (column datatype [DEFAULT expr]

                         [, column datatype]...);

    修改

    ALTER TABLE table

    MODIFY     (column datatype [DEFAULT expr]

                         [, column datatype]...);

     

    删除

    ALTER TABLE table

    DROP       column   (column_name);

     

    修改列的名称

    ALTER TABLE table_name rename column old_column_name

    to new_column_name

     

     

    案例:

    //采用子查询创建customer表 表的结构域users表完全一致

    SQL> create table customer as select * from users;

    Table created

    SQL> commit; //事务提交

    Commit complete

    //customer表添加新的列 email 类型varchar2(20).

    SQL> alter table customer add email varchar2(20);

    Table altered

    SQL> commit;

    SQL> desc customer;

    Name Type       Nullable Default Comments

    -------- ------------ -------- ------- --------

    USERNAME VARCHAR2(20) Y                       

    PASSWORD VARCHAR2(20)                          

    NAME VARCHAR2(20)                          

    ADDRESS VARCHAR2(20) Y                       

    ZIP     NUMBER(6) Y                        

    EMAIL VARCHAR2(20) Y   

    //修改某个字段的类型

    SQL> alter table customer modify email number(4);

     

    Table altered

     

    SQL> commit;

     

    Commit complete

     

    SQL> desc customer;

    Name Type       Nullable Default Comments

    -------- ------------ -------- ------- --------

    USERNAME VARCHAR2(20) Y                       

    PASSWORD VARCHAR2(20)                          

    NAME VARCHAR2(20)                          

    ADDRESS VARCHAR2(20) Y                       

    ZIP     NUMBER(6) Y                       

    EMAIL NUMBER(4) Y     

    //删除某个字段

    SQL> alter table customer drop column email;

    Table altered

    SQL> commit;

    Commit complete

    SQL> select * from customer;

    //修改表的某个字段的名称

    SQL> alter table customer rename column address to addr;

    Table altered

    SQL> commit;

     

    删除表

    l        数据和结构都被删除

    l        所有正在运行的相关事物被提交

    l        所有相关索引被删除

    l        DROP TABLE 语句不能回滚

     

    修改对象的名称

    l        执行RENAME语句改变表, 视图, 序列, 或同义词的名称

    l        必须是对象的拥有者

    //修改对象的名称操作

    SQL> rename customer to customers;

    清空表

    l        TRUNCATE TABLE 语句:

    •         删除表中所有的数据

    •         释放表的存储空间

    l        TRUNCATE语句不能回滚

    l        可以使用 DELETE 语句删除数据

    //清空表的操作

    SQL> truncate table customers;

     

    总结:您已经学会如何使用DDL语句创建, 修改, 删除, 和重命名表.

    语句           描述

    CREATE TABLE 创建表

    ALTER TABLE 修改表结构

    DROP TABLE   删除表

    RENAME        重命名表

    TRUNCATE      删除表中的所有数据,并释放存储空间

     


    最新回复(0)