zoukankan      html  css  js  c++  java
  • Oracle数据库之创建表结构

    Oracle数据库之创建表结构

    主键与外键

    主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(可以是一个属性,也可以是多个)能唯一标识一条记录,那么该属性组就是主键。

    外键:关系型数据库表中的一列或者某几列的组合,它的值与另外一张表的某一列或者某几列相匹配,且为另一张表的主键(即这张表的某一列或某几列是另外一张表的主键,称这一列或几列为另外一张表的外键)。

    注意:

    1. 一张表主键只能有一个,可以有多个外键以及唯一索引
    2. Oracle数据库共有5个约束:主键、外键、非空、唯一、条件 
      • 非空:这个列的值不能为空(NOT NULL)
      • 唯一:这个列的值在表中是唯一存在的,不能重复,但可以为空值(NULL)
      • 条件:可以对列的值设定在某个范围内,如人的年龄就不能为负数等。
    3. 主键和唯一约束的区别:主键是列的值为表中的唯一标识,不能为空值(NULL),而唯一约束是列的值在表中唯一存在,可以为空值(NULL)。

    表的创建

    语法结构:

    CREATE TABLE [schema.]table_name
    (column datatype [constraint-clause][, column  datatype [constraint-clause]] … )
    [TABLESPACE tablespace]
    [PCTFREE integer]
    [PCTUSED integer]
    [INITRANS integer]
    [MAXTRANS integer]
    [STORAGE storage-clause]
    [LOGGING|NOLOGGING]
    [CACHE|NOCACHE] ];

    说明:

    • schema:表的所有者
    • table_name:表名
    • column:字段名
    • datatype:字段的数据类型
    • constraint-clause:列约束说明
    • tablespace:表所在的表空间
    • PCTFREE:为了行长度增长而在每个块中保留的空间的量(以占整个空间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree时,不再向该块中增加新行。
    • PCTUSED:在块剩余空间不足pctfree后,块已使用空间百分比必须小于pctused后,才能向该块中增加新行。
    • INITRANS:在块中预先分配的事务项数,缺省值为1
    • MAXTRANS:限定可以分配给每个块的最大事务项数,缺省值为255
    • STORAGE:标识决定如何将区分配给表的存储子句
    • LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表的后续操作都将被记录下来。这是缺省设置。
    • NOLOGGING:指定表的创建将不被记录到重做日志文件中。
    • CACHE:指定即使在执行全表扫描时,为该表检索的块也将放置在缓冲区高速缓存的LRU列表最近使用的一端。
    • NOCACHE:指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列表最近未使用的一端。
    • STORAGE子句:
    • INITIAL:初始区的大小
    • NEXT:下一个区的大小
    • PCTINCREASE:以后每个区空间增长的百分比
    • MINEXTENTS:段中初始区的数量
    • MAXEXTENTS:最大能扩展的区数

    常用建表示例:

    -- 无约束
    CREATE TABLE Items(
        ItemNO number(2),
        ItemName varchar2(20)
    );
    -- 主键约束
    CREATE TABLE Items(
        ItemNO number(2) constraint PK_Items primary key,
        ItemName varchar2(20) not null
    );
    -- 外键约束
    CREATE TABLE Business(
        BusiNo number(2) constraint PK_Business primary key,
        BusiName varchar2(32) not null,
        ItemNO number(2),
        StartTime date,
        constraint FK_Business foreign key(ItemNO) references Items(ItemNO)
    );
    -- “唯一”和“条件”约束
    CREATE TABLE Computers(
        CompNo number(4) constraint PK_Comp primary key,
        CompModel varchar2(64) unique,
        BuyTime date,
        Price number(7,2) constraint ch_price check(price>0 and price<=30000),
        Owner varchar2(32));

    注意:

    constraint:定义表中约束所必须的关键字

    primary key:主键约束关键字

    foreign key…references…:创建表的外键关键字

    unique:为唯一约束关键字

    constraint…check…:为条件约束的关键字

    一个完整的示例:

    CREATE TABLE Employee(
        id  NUMBER(5) CONSTRAINT pk_employee_id PRIMARY KEY,
        last_name VARCHAR2(10) CONSTRAINT employee_last_name_nn NOT NULL,
        first_name VARCHAR2(10) NOT NULL UNIQUE,
        userid VARCHAR2(8) CONSTRAINT un_employee_userid UNIQUE,
        start_date DATE DEFAULT SYSDATE,
        title VARCHAR2(10),
        dept_id NUMBER(7) CONSTRAINT fk_employee_dept_id REFERENCES dept(id),
        salary NUMBER(11,2),
        user_type VARCHAR2(4) CONSTRAINT ck_employee_user_type CHECK (user_type IN('IN','OUT')),
        CONSTRAINT employee_uq_title UNIQUE (title,salary)
    )
    TABLESPACE tsb_01
    INITRANS 1
    MAXTRANS 255
    PCTFREE 20
    PCTUSED 50
    STORAGE (INITIAL 1024K NEXT 1024K PCTINCREASE 0 MINEXTENTS 1 MAXEXTENTS 5)

    删除表

    DROP TABLE employee;

    修改表

    -- 修改表的名称
    RENAME Items TO OrderItems;
    -- 显示表结构
    DESC OrderItems;
    -- 增加列
    ALTER TABLE test ADD address varchar2(40);
    -- 删除列
    ALTER TABLE test DROP COLUMN address;
    -- 修改列的名称
    ALTER TABLE test MODIFY address addresses varchar(40);
    -- 修改列的属性
    ALTER TABLE Emp modify score not null;

    添加约束,语法如下:

    ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段) 
    -- 示例
    ALTER TABLE Dept ADD CONSTRAINT pk_dept primary key(id);
    ALTER TABLE Dept ADD CONSTRAINT fk_dept_comp foreign key(companyid) references Company;

    删除约束,语法:

    ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;    
    -- 示例
    ALTER TABLE book DROP CONSTRAINT fk_book_pid; 
  • 相关阅读:
    mysql高并发配置
    php xml转array的方法
    双系统,一系统损坏后的解决方案之硬盘启动
    最长公共前缀
    罗马数字转整数
    回文数
    整数反转
    一、数组---两数之和
    从尾到头打印链表
    替换空格
  • 原文地址:https://www.cnblogs.com/zf29506564/p/5759945.html
Copyright © 2011-2022 走看看