oracle資料庫的約束

來源:互聯網
上載者:User

約束:
        用於確保資料庫資料滿足特定的商業規則。
        Oracle中的約束包括:
                     not null:
                     unique:
                     primary key: pk
                     foreign key: fk
                     check:
                     
       a.not null : 非空約束:
           如果在列上定義了not null,那麼增加資料時,必須為該列提供資料。
           
       b.unique : 唯一約束:
           當定義唯一約束後,該列的值是不能重複的,但是可以為null。比如:社會安全號碼、產品編號、...
           
       c.primary key : 主鍵約束:
           用於唯一的標示表行的資料。當定義了主鍵約束後,該列不但不能重複,而且不能為null。
           注意:一張表最多隻能由一個主鍵(可以有聯合主鍵),但是可以有多個unique約束。
           
       d.foreign key : 外鍵約束:
           用於定義主表和從表之間的關係。外鍵約束要定義在從表上,主表則必須具有主鍵約束或者unique約束。
           當定義外鍵約束後,要求外鍵列的資料必須在主表的主鍵列存在或是為null。
           
       e.check : 檢查約束:
           用於強制列資料必須滿足條件。
           如:假如在sal列上定義了check約束,並要求sal列值在1000--2000之間,那麼在增加資料時,工資少於1000或者大於2000,就會報check約束錯誤。
           
           
       案例1:商店售貨系統資料表設計案例。
           現在一個商務資料庫記錄客戶及其購物情況,由下面三個表組成
             a.商業表goods(商品號 goodsId, 商品名 goodsName, 單價unitprice,商品類別 category 供應商provider)
             b.客戶表customer(客戶編碼 customerId, 姓名 name,  住址 address, 電郵 email, 性別 sex,身份證 cardId)
             c.銷售表 purchase(客戶編碼 customerId,商品編號goodsId,購買數量 nums)
             
           請使用SQL語句建立表,並完成下列功能:
           在定義列時,要求聲明:
             a.每個表的主外健;
             b.客戶的姓名不可為空;
             c.單價必須大於0,購買數量必須在1--30之間;
             d.電郵不能夠重複;
             e.客戶的性別必須是 男 或 女,預設為 男 。
             
           --建立goods表:
               create table goods(
                   goodsid char(8) primary key,--主鍵
                   goodsName varchar2(30),
                   unitprice number(10,2) check (unitprice > 0),--檢查約束,單價大於0
                   category varchar2(8),
                   provider varchar2(20)
                 );
                 
            --建立customer表:
                create table customer(
                    customerId char(8) primary key,--主鍵
                    name varchar2(30) not null,--不可為空
                    address varchar2(50),
                    email varchar2(30) unique,--唯一約束,不能重複
                    sex char(2) default '男' check (sex in ('男','女')),
                    cardId char(18)
                );
             --建立purchase表:
                create table purchase(
                    customerId char(8) references customer(customerId),
                    goodsId char(8) references goods(goodsId),
                    nums number(5) check (nums between 1 and 30) --購買數量必須在1--30之間
                );
             
        案例2:
            如果在建立表的時候,忘記建立必要的約束,則可以在建立表後使用 alter table 命令來為表增加約束。
            注意:增加 not null 約束時,需要使用 modify 選項。
                  增加其它四種約束時,使用 add 選項。
                  
           a.增加 商品名也不可為空;
           b.增加 社會安全號碼也不能重複;
           c.增加客戶的住址只能是 '武昌區','洪山區','青山區','江漢區'。
           
           a.SQL>alter table goods modify goodsName not null;
           
           b.SQL>alter table customer add connstraint cardunique unique(cardId);
                                             約束       約束名   增加的約束類型
           
           c.SQL>alter table customer add connstraint addresscheck check(address in ('武昌區','洪山區','青山區','江漢區'));
                 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.