Oracle表管理以及約束筆記

字號:


    [導讀]最近一直在學習Oracle數(shù)據(jù)庫。這幾天整理了下 表管理 以及約束的筆記 給大家分享下。
    最近一直在學習Oracle數(shù)據(jù)庫。這幾天整理了下 表管理 以及約束的筆記 給大家分享下。
    表管理
    *!常用的數(shù)據(jù)類型!*
    varchar/varchar2 表示一個字符串
    number/ number(n): 表示一個整數(shù),數(shù)字長度是n,可以使用INT
    \ number(m,n): 表示一個小數(shù),數(shù)字小數(shù)位長度是n,整數(shù)長度是m-n,可以使用FLOAT代替
    date 表示日期類型,日期要按照標準日期格式進行存放。
    clob 大對象,表示大文本數(shù)據(jù),一般可以存放4G的文本。
    blob 大對象,表示二進制數(shù)據(jù),最大可以存放4G,例如:電影、歌曲、圖片
    ·表的建立。
    1·復制一張表
    create table 表名 as select * from emp; ----復制emp表中的結構和內容
    create table 表名 as select * from emp where 1=2;----復制結構不復制內容
    2·創(chuàng)建一張表。create 命令
    ________________范例____________________
    create table person
    (
    pid varchar2(18),
    name varchar2(200),
    age number(3),
    birthday date,
    sex varchar2(2)default '男'
    );
    ________________________________________
    ·刪除表
    drop 刪除表。
    ·修改表(了解) 一般很少修改表 在IBM 的DB2中根本沒有alter指令
    *!表中存在大量記錄,刪除的話 是不是很麻煩?!* 有命令:
    ·增加列:alter指令+table+表名稱+add
    __________________________范例__________________________________
    alter table person add(address varchar(200) default '暫無地址');
    ________________________________________________________________
    ·修改列。alter指令+table+表名稱+modify+(列信息);
    ·表重命名(Oracle獨有的命令)
    rename … to … 只能在Oracle中使用
    ·截斷表
    清空一張表 不能回滾,
    需要截斷表語法:
    truncate +表明
    ############約束############
    主要分為五種:
    ·主鍵約束:表示唯一的表示,本身不能為空。 *例如*:身份證編號、
    ·唯一約束:在以個表中只允許建立以個主鍵約束而其他不想出現(xiàn)重復的值的話,則可以使用唯一約束。
    ·檢查約束:檢查一個列的內容是否合法。 *例如*:性別只能是男、女、中性。
    ·非空約束,就好像姓名這樣的字段就不能為空。
    ·外間約束,在兩張表中間進行約束操作。
    1·主鍵約束(primary key)
    ·一般在ID上使用,而且本身已經(jīng)默認內容不能為空??梢栽诮⒈淼臅r候指定。
    _________________________范例__________________________________
    create table person
    (
    pid varchar2(18) primary key,
    name varchar2(200),
    age number(3),
    birthday date,
    sex varchar2(2)default '男'
    );
    ________________________________________________________________
    ·可以用constraint來指定約束的名稱
    _________________________范例__________________________________
    create table person
    (
    pid varchar2(18) ,
    name varchar2(200),
    age number(3),
    birthday date,
    sex varchar2(2)default '男',
    constraint person_pid_pk primary key (pid)
    );
    ________________________________________________________________
    2·非空約束(not null)
    _________________________范例__________________________________
    create table person
    (
    pid varchar2(18) ,
    name varchar2(200) not null ,
    age number(3) not null ,
    birthday date,
    sex varchar2(2)default '男',
    constraint person_pid_pk primary key (pid)
    );
    ________________________________________________________________
    3·唯一約束(unique)
    表示一個字段中的內容是唯一的,其他列不允許重復。
    _________________________范例__________________________________
    create table person
    (
    pid varchar2(18) ,
    name varchar2(200) not null ,
    age number(3) not null ,
    birthday date,
    sex varchar2(2) default '男',
    constraint person_pid_pk primary key (pid)
    );
    ________________________________________________________________
    4·檢查約束(check)
    使用檢查約束來判斷一個列中插入的內容是否合法、例如年齡的取值范圍
    _________________________范例__________________________________
    create table person
    (
    pid varchar2(18) ,
    name varchar2(200) not null ,
    age number(3) not null check(age between 0 and 150),
    birthday date,
    sex varchar2(2) default '男' check(sex in ('男','女','中性')),
    constraint person_pid_pk primary key (pid)
    );
    ________________________________________________________________
    上面語句 優(yōu)化自定義 約束名稱
    create table person
    (
    pid varchar2(18) ,
    name varchar2(200) not null ,
    age number(3) not null ,
    birthday date,
    sex varchar2(2) default '男' ,
    constraint person_pid_pk primary key (pid),
    constraint person_name_uk unique(name),
    constraint person_age_ck check(age between 0 and 150),
    constraint person_sex_ck check(sex in ('男','女','中性'))
    );_________________________________________________
    5·主-外鍵約束(foreign key)
    之前的約束都是針對一張表的約束,這個主-外鍵約束是針對兩張表的約束。
    范例:書這個表中的一本書屬于人這個表中的一個人。
    (1)·首先插入兩張表。
    drop table person;
    drop table book;
    create table person
    (
    pid varchar2(18) ,
    name varchar2(200) not null ,
    age number(3) not null ,
    birthday date,
    sex varchar2(2) default '男' ,
    constraint person_pid_pk primary key (pid),
    constraint person_name_uk unique(name),
    constraint person_age_ck check(age between 0 and 150),
    constraint person_sex_ck check(sex in ('男','女','中性'))
    );
    create table book
    (
    bid number primary key not null ,
    bname varchar(30),
    bprice number(5,2),pid varchar2(18)
    );
    (2)·插入完成兩張表之后,下一步插入一些數(shù)據(jù)。
    insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','111111');
    insert into person (PID,NAME,AGE,BIRTHDAY,SEX) values ('111111','張三',30,to_date('1987-12-27','yyyy-mm-
    dd'),'女');
    (3)·插入以下數(shù)據(jù)
    insert into book(bid ,bname ,bprice,pid) values ( 1,'Java Se' ,'59','000000');
    *!注意!*此編號的人根本不存在。數(shù)據(jù)也就不應該插入。
    *!注意!*此時應該用到主-外鍵關聯(lián),關聯(lián)之后 字表 的數(shù)據(jù)跟隨著 父表 的數(shù)據(jù)內容
    主-外鍵語法:foreign key(字段) reference 表名(字段)后者表作為父表 后者表明是指定字段作為父表的字
    段 book 表的創(chuàng)建有所改變,變成如下
    drop table book;
    create table book
    (
    bid number primary key not null ,
    bname varchar(30),
    bprice number(5,2),
    pid varchar2(18) ,
    constraint person_book_pid_fk foreign key(pid) references person(pid)
    );
    再插入數(shù)據(jù)
    此時就不會出現(xiàn)找不到對應數(shù)據(jù)的情況。這就是主外鍵。
    ·在字表中設置的外鍵在父表中必須是主鍵。
    ·刪除時應該先刪除子表,再刪除父表。
    drop table book; book表是父表。
    drop table person; person表是字表。
    可以使用強制刪除手段,但這個做法一般不使用。
    ________范例______________________
    drop table book cascade constraint;不管約束 直接刪除。
    __________________________________
    ·級聯(lián)刪除
    建立主外鍵連接的時候可以加上 on delete cascade 刪的時候連同字表的對應數(shù)據(jù)一起刪除掉。
    這是外鍵的完整語法。
    ############修改約束#######(了解)##
    ·添加約束
    alter 表名稱 add constraint 約束名稱 約束類型(字段);
    *!重點!* ROWNUM
    rownum:表示行號、實際上這此是一個列,但這個列是一個偽列,此列可以在每張表中出現(xiàn)。