日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 约束 Oracle 10g学习系列(5)

發(fā)布時間:2023/12/9 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 约束 Oracle 10g学习系列(5) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這篇文章來自網(wǎng)絡,寫的挺好,轉(zhuǎn)過來了。

?維護數(shù)據(jù)的完整性

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


1、約束

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

A、not null(非空)
如果在列上定義了not null,那么當插入數(shù)據(jù)時,必須為列提供數(shù)據(jù)。

B、unique(唯一)
當定義了唯一約束后,該列值是不能重復的,但是可以為null。

C、primary key(主鍵)
用于唯一的標識表行的數(shù)據(jù),當定義主鍵約束后,該列不但不能重復而且不能為NULL。一張表最多只能有一個主鍵,但是可以由多個unique約束。

D、foreign key(外鍵)
用于定義主表和從表之間的關(guān)系,外鍵約束要定義在從表上,主要則必須具有主鍵約束或是unique約束,當定義外鍵約束后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或是為NULL。

E、check

用于強制行數(shù)據(jù)必須滿足的條件,假定在sal列上定義了check約束,并要求sal列值在1000~2000之間,如果不在1000~2000之間就會提示出錯。


綜合案例:
商品售貨系統(tǒng)表設計案例
現(xiàn)在有一個商店的數(shù)據(jù)庫,記錄客戶及其購物情況,由下面三個表組成:
商品表Goods(商品號GoodsId,商品名GoodName,單價UnitPrice,商品類別Categroy,供應商Provider)
客戶表Customers(客戶號CustomerId,姓名Name,住址Address,電郵Email,性別Gender,***CardId)
銷售表Purchases(客戶號CustomerId,商品號GoodsId,購買數(shù)量Num)
請用SQL語言完成下列功能:
建表,在定義中要求聲明:
(1)每個表的主外鍵。
(2)客戶的姓名不能為空值。
(3)單價必須大于0,購買數(shù)量必須在1~30之間。
(4)電郵不能夠重復。
(5)客戶的性別必須是男或女,默認是男。

CREATE TABLE goods ??

? ( ??

? ? ?goodsid ? CHAR(8) PRIMARY KEY, ??

? ? ?goodname ?VARCHAR2(30), ??

? ? ?unitprice NUMBER(10, 2) CHECK(unitprice>0), ??

? ? ?category ?VARCHAR2(8), ??

? ? ?provider ?VARCHAR2(30) ??

? );


CREATE TABLE customers ??

? ( ??

? ? ?customerid CHAR(8) PRIMARY KEY, ??

? ? ?name ? ? ? VARCHAR2(30) NOT NULL, ??

? ? ?address ? ?VARCHAR2(150), ??

? ? ?email ? ? ?VARCHAR2(100) UNIQUE, ??

? ? ?gender ? ? CHAR(2) DEFAULT('男') CHECK(gender IN('男', '女')), ??

? ? ?cardid ? ? CHAR(18) ??

? );


CREATE TABLE purchases ??

? ( ??

? ? ?customerid CHAR(8) REFERENCES customers(customerid), ??

? ? ?goodsid ? ?CHAR(8) REFERENCES goods(goodsid), ??

? ? ?num ? ? ? ?NUMBER(10) CHECK(num BETWEEN 1 AND 30) ??

? ); ? ??


2、添加約束


如果在建表時忘記建立必要的約束,則可以在建表后使用alter table命令為表增加約束,但是要注意:增加not null約束時,需要使用modify選項,而增加其他四種約束使用add選項。

(1)增加商品名也不能為空

ALTER TABLE goods ?MODIFY goodsid NOT NULL;

(2)增加***也不能重復

ALTER TABLE customers ?ADD CONSTRAINT uq_cardid UNIQUE(cardid);

(3)增加客戶的住址只能是海淀、朝陽、東城、西域

ALTER TABLE customers ?ADD CONSTRAINT ck_address CHECK(address IN ('海淀','朝陽','東城','西域'));?


3、刪除約束


當不再需要某個約束時,可以刪除。

alter table 表名 drop constraint 約束名稱;?

特別說明:

在刪除主鍵約束的時候,可能有錯誤。比如

alter table 表名 drop primary key; ?

這是因為如果在兩表存在主從關(guān)系,那么在刪除主表主鍵約束時,必須帶上cascade選項。

alter table 表名 drop primary key cascade;?



轉(zhuǎn)載于:https://blog.51cto.com/whnba/1596265

總結(jié)

以上是生活随笔為你收集整理的oracle 约束 Oracle 10g学习系列(5)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。