Oracle表管理以及約束筆記

字號(hào):


    [導(dǎo)讀]最近一直在學(xué)習(xí)Oracle數(shù)據(jù)庫(kù)。這幾天整理了下 表管理 以及約束的筆記 給大家分享下。
    最近一直在學(xué)習(xí)Oracle數(shù)據(jù)庫(kù)。這幾天整理了下 表管理 以及約束的筆記 給大家分享下。
    表管理
    *!常用的數(shù)據(jù)類(lèi)型!*
    varchar/varchar2 表示一個(gè)字符串
    number/ number(n): 表示一個(gè)整數(shù),數(shù)字長(zhǎng)度是n,可以使用INT
    \ number(m,n): 表示一個(gè)小數(shù),數(shù)字小數(shù)位長(zhǎng)度是n,整數(shù)長(zhǎng)度是m-n,可以使用FLOAT代替
    date 表示日期類(lèi)型,日期要按照標(biāo)準(zhǔn)日期格式進(jìn)行存放。
    clob 大對(duì)象,表示大文本數(shù)據(jù),一般可以存放4G的文本。
    blob 大對(duì)象,表示二進(jìn)制數(shù)據(jù),最大可以存放4G,例如:電影、歌曲、圖片
    ·表的建立。
    1·復(fù)制一張表
    create table 表名 as select * from emp; ----復(fù)制emp表中的結(jié)構(gòu)和內(nèi)容
    create table 表名 as select * from emp where 1=2;----復(fù)制結(jié)構(gòu)不復(fù)制內(nèi)容
    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中根本沒(méi)有alter指令
    *!表中存在大量記錄,刪除的話(huà) 是不是很麻煩?!* 有命令:
    ·增加列:alter指令+table+表名稱(chēng)+add
    __________________________范例__________________________________
    alter table person add(address varchar(200) default '暫無(wú)地址');
    ________________________________________________________________
    ·修改列。alter指令+table+表名稱(chēng)+modify+(列信息);
    ·表重命名(Oracle獨(dú)有的命令)
    rename … to … 只能在Oracle中使用
    ·截?cái)啾?BR>    清空一張表 不能回滾,
    需要截?cái)啾碚Z(yǔ)法:
    truncate +表明
    ############約束############
    主要分為五種:
    ·主鍵約束:表示唯一的表示,本身不能為空。 *例如*:身份證編號(hào)、
    ·唯一約束:在以個(gè)表中只允許建立以個(gè)主鍵約束而其他不想出現(xiàn)重復(fù)的值的話(huà),則可以使用唯一約束。
    ·檢查約束:檢查一個(gè)列的內(nèi)容是否合法。 *例如*:性別只能是男、女、中性。
    ·非空約束,就好像姓名這樣的字段就不能為空。
    ·外間約束,在兩張表中間進(jìn)行約束操作。
    1·主鍵約束(primary key)
    ·一般在ID上使用,而且本身已經(jīng)默認(rèn)內(nèi)容不能為空??梢栽诮⒈淼臅r(shí)候指定。
    _________________________范例__________________________________
    create table person
    (
    pid varchar2(18) primary key,
    name varchar2(200),
    age number(3),
    birthday date,
    sex varchar2(2)default '男'
    );
    ________________________________________________________________
    ·可以用constraint來(lái)指定約束的名稱(chēng)
    _________________________范例__________________________________
    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)
    表示一個(gè)字段中的內(nèi)容是唯一的,其他列不允許重復(fù)。
    _________________________范例__________________________________
    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)
    使用檢查約束來(lái)判斷一個(gè)列中插入的內(nèi)容是否合法、例如年齡的取值范圍
    _________________________范例__________________________________
    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ǔ)句 優(yōu)化自定義 約束名稱(chēng)
    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)
    之前的約束都是針對(duì)一張表的約束,這個(gè)主-外鍵約束是針對(duì)兩張表的約束。
    范例:書(shū)這個(gè)表中的一本書(shū)屬于人這個(gè)表中的一個(gè)人。
    (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');
    *!注意!*此編號(hào)的人根本不存在。數(shù)據(jù)也就不應(yīng)該插入。
    *!注意!*此時(shí)應(yīng)該用到主-外鍵關(guān)聯(lián),關(guān)聯(lián)之后 字表 的數(shù)據(jù)跟隨著 父表 的數(shù)據(jù)內(nèi)容
    主-外鍵語(yǔ)法: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ù)
    此時(shí)就不會(huì)出現(xiàn)找不到對(duì)應(yīng)數(shù)據(jù)的情況。這就是主外鍵。
    ·在字表中設(shè)置的外鍵在父表中必須是主鍵。
    ·刪除時(shí)應(yīng)該先刪除子表,再刪除父表。
    drop table book; book表是父表。
    drop table person; person表是字表。
    可以使用強(qiáng)制刪除手段,但這個(gè)做法一般不使用。
    ________范例______________________
    drop table book cascade constraint;不管約束 直接刪除。
    __________________________________
    ·級(jí)聯(lián)刪除
    建立主外鍵連接的時(shí)候可以加上 on delete cascade 刪的時(shí)候連同字表的對(duì)應(yīng)數(shù)據(jù)一起刪除掉。
    這是外鍵的完整語(yǔ)法。
    ############修改約束#######(了解)##
    ·添加約束
    alter 表名稱(chēng) add constraint 約束名稱(chēng) 約束類(lèi)型(字段);
    *!重點(diǎn)!* ROWNUM
    rownum:表示行號(hào)、實(shí)際上這此是一個(gè)列,但這個(gè)列是一個(gè)偽列,此列可以在每張表中出現(xiàn)。