乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      oracle學習筆記之約束

       levinLee 2010-07-27

      十三:約束

      維護數(shù)據(jù)的完整性
      介紹
       
      介紹
      數(shù)據(jù)的完整性用于確保數(shù)據(jù)庫數(shù)據(jù)遵從一定的商業(yè)和邏輯規(guī)則,在oracle中,數(shù)據(jù)完整性可以使用約束、觸發(fā)器、應用程序(過程、函數(shù))三種方法來實現(xiàn),在這三種方法中,因為約束易于維護,并且具有最好的性能,所以作為維護數(shù)據(jù)完整性的首選。

      約束
       
      約束
      約束用于確保數(shù)據(jù)庫數(shù)據(jù)滿足特定的商業(yè)規(guī)則。在oracle中,約束包括:not null、 unique primary key, foreign key,和check五種。

      使用
       not null
      (非空)
      如果在列上定義了not null,那么當插入數(shù)據(jù)時,必須為列提供數(shù)據(jù)。
       unique
      (唯一)
      當定義了唯一約束后,該列值是不能重復的,但是可以為null。
       primary key
      (主鍵)
      用于唯一的標示表行的數(shù)據(jù),當定義主鍵約束后,該列不但不能重復而且不能為null。
      需要說明的是:一張表最多只能有一個主鍵,但是可以有多個unqiue約束。
       foreign key
      (外鍵)
      用于定義主表和從表之間的關系。外鍵約束要定義在從表上,主表則必須具有主鍵約束或是unique約束,當定義外鍵約束后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或是為null。
       check
      用于強制行數(shù)據(jù)必須滿足的條件,假定在sal列上定義了check約束,并要求sal列值在1000-2000之間如果不在1000-2000之間就會提示出錯。

       
      商店售貨系統(tǒng)表設計案例
      現(xiàn)有一個商店的數(shù)據(jù)庫,記錄客戶及其購物情況,由下面三個表組成:商品goods(商品號goodsId,商品名 goodsName,單價 unitprice,商品類別category,供應商provider);
      客戶customer(客戶號customerId,姓名name,住在address,電郵email,性別sex,身份證cardId);
      購買purchase(客戶號customerId,商品號goodsId,購買數(shù)量nums);
      請用SQL語言完成下列功能:
      1.
      建表,在定義中要求聲明:
      (1).
      每個表的主外鍵;
      (2).
      客戶的姓名不能為空值;
      (3).
      單價必須大于0,購買數(shù)量必須在130之間;
      (4).
      電郵不能夠重復;
      (5).
      客戶的性別必須是 男 或者 女,默認是男;

      SQL> create table goods(goodsId char(8) primary key, --
      主鍵
                  goodsName varchar2(30)

                  unitprice number(10,2) check(unitprice>0),
                  category varchar2(8),
                  provider varchar2(30)
           );
      SQL> create table customer( customerId char(8) primary key, --
      主鍵
                  name varchar2(50) not null,  --
      不為空
                  address varchar2(50),
                  email varchar2(50) unique,
                  sex char(2) default '
      ' check(sex in ('','')), -- 一個char能存半個漢字,兩位char能存一個漢字
                  cardId char(18)
           );
      SQL> create table purchase( customerId char(8) references customer(customerId),
                  goodsId char(8) references goods(goodsId),
                  nums number(10) check (nums between 1 and 30)
           );
      表是默認建在SYSTEM表空間的

      維護
       
      商店售貨系統(tǒng)表設計案例(2
      如果在建表時忘記建立必要的約束,則可以在建表后使用alter table命令為表增加約束。但是要注意:增加not null約束時,需要使用modify選項,而增加其它四種約束使用add選項。
      1.
      增加商品名也不能為空
      SQL> alter table goods modify goodsName not null;
      2.
      增加身份證也不能重復
      SQL> alter table customer add constraint xxxxxx unique(cardId);
      3.
      增加客戶的住址只能是海淀’,’朝陽’,’東城’,’西城’,’通州’,’崇文’,’昌平
      SQL> alter table customer add constraint yyyyyy check (address in (’
      海淀’,’朝陽’,’東城’,’西城’,’通州’,’崇文’,’昌平’));

       
      刪除約束
      當不再需要某個約束時,可以刪除。
      alter table
      表名 drop constraint 約束名稱;
      特別說明一下:
      在刪除主鍵約束的時候,可能有錯誤,比如:
      alter table
      表名 drop primary key;
      這是因為如果在兩張表存在主從關系,那么在刪除主表的主鍵約束時,必須帶上cascade選項 如像:
      alter table
      表名 drop primary key cascade;

       
      顯示約束信息
      1.
      顯示約束信息
      通過查詢數(shù)據(jù)字典視圖user_constraints,可以顯示當前用戶所有的約束的信息。
      select constraint_name, constraint_type, status, validated from user_constraints where table_name = '
      表名';
      2.
      顯示約束列
      通過查詢數(shù)據(jù)字典視圖user_cons_columns,可以顯示約束所對應的表列信息。
      select column_name, position from user_cons_columns where constraint_name = '
      約束名';
      3.
      當然也有更容易的方法,直接用pl/sql developer查看即可。簡單演示一下下...

      表級定義 列級定義
       
      列級定義
      列級定義是在定義列的同時定義約束。
      如果在department表定義主鍵約束
      create table department4(dept_id number(12) constraint pk_department primary key,
      name varchar2(12), loc varchar2(12));
       
      表級定義
      表級定義是指在定義了所有列后,再定義約束。這里需要注意:
      not null
      約束只能在列級上定義。
      以在建立employee2表時定義主鍵約束和外鍵約束為例:
      create table employee2(emp_id number(4), name varchar2(15),
      dept_id number(2), constraint pk_employee primary key (emp_id),
      constraint fk_department foreign key (dept_id) references department4(dept_id));

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多