亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle數據庫數據對象分析(中)

2024-08-29 13:46:25
字體:
來源:轉載
供稿:網友
完整性約束

  完整性約束用于增強數據的完整性,Oracle提供了5種完整性約束:

    Check
    NOT NULL
    Unique
    PRimary
    Foreign key

  完整性約束是一種規則,不占用任何數據庫空間。完整性約束存在數據字典中,在執行SQL或PL/SQL期間使用。用戶可以指明約束是啟用的還是禁用的,當約束啟用時,他增強了數據的完整性,否則,則反之,但約束始終存在于數據字典中。

  禁用約束,使用ALTER語句

ALTER TABLE table_name DISABLE CONSTRAINT constraint_name;
  或

ALTER TABLE policies DISABLE CONSTRAINT chk_gender
  假如要重新啟用約束:

ALTER TABLE policies ENABLE CONSTRAINT chk_gender
  刪除約束

ALTER TABLE table_name DROP CONSTRAINT constraint_name
  或

ALTER TABLE policies DROP CONSTRAINT chk_gender;
  Check 約束

  在數據列上Check 約束需要 一個非凡的布爾條件或者將數據列設置成TRUE,至少一個數據列的值是NULL,Check約束用于增強表中數據內容的簡單的商業規則。用戶使用Check約束保證數據規則的一致性。Check約束可以涉及該行同屬Check約束的其他數據列但不能涉及其他行或其他表,或調用函數SYSDATE,UID,USER,USERENV。假如用戶的商業規則需要這類的數據檢查,那么可以使用觸發器。Check約束不保護LOB數據類型的數據列和對象、嵌套表、VARRY、ref等。單一數據列可以有多個Check約束保護,一個Check約束可以保護多個數據列。

  創建表的Check約束使用CREATE TABLE語句,更改表的約束使用ALTER TABLE語句。

  語法:

CONSTRAINT [constraint_name] CHECK (condition);
  Check約束可以被創建或增加為一個表約束,當Check約束保護多個數據列時,必須使用表約束語法。約束名是可選的并且假如這個名字不存在,那么oracle將產生一個以SYS_開始的唯一的名字。

  例:

CREATE TABLE policies
(policy_id NUMBER,
holder_name VARCHAR2(40),
gender VARCHAR2(1) constraint chk_gender CHECK (gender in ('M','F'),
marital_status VARCHAR2(1),
date_of_birth DATE,
constraint chk_marital CHECK (marital_status in('S','M','D','W'))
);

  NOT NULL約束

  NOT NULL約束應用在單一的數據列上,并且他保護的數據列必須要有數據值。缺省狀況下,ORACLE答應任何列都可以有NULL值。某些商業規則要求某數據列必須要有值,NOT NULL約束將確保該列的所有數據行都有值。

  例:

CREATE TABLE policies
(policy_id NUMBER,
holder_name VARCHAR2(40) NOT NULL,
gender VARCHAR2(1),
marital_status VARCHAR2(1),
date_of_birth DATE NOT NULL
);
  對于NOT NULL的ALTER TABLE語句與其他約束稍微有點不同。

ALTER TABLE policies MODIFY holder_name NOT NULL 唯一性約束(Unique constraint)

  唯一性約束可以保護表中多個數據列,保證在保護的數據列中任何兩行的數據都不相同。唯一性約束與表一起創建,在唯一性約束創建后,可以使用ALTER TABLE語句修改。

  語法:

column_name data_type CONSTRAINT constraint_name UNIQUE
  假如唯一性約束保護多個數據列,那么唯一性約束要作為表約束增加。語法如下:

CONSTRAINT constraint_name (column) UNIQUE USING INDEX TABLESPACE (tablespace_name) STORAGE (stored clause)
  唯一性約束由一個B-tree索引增強,所以可以在USING子串中為索引使用非凡特征,比如表空間或存儲參數。CREATE TABLE語句在創建唯一性約束的同時也給目標數據列建立了一個唯一的索引。

CREATE TABLE insured_autos
(policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY,
vin VARCHAR2(10),
coverage_begin DATE,
coverage_term NUMBER,
CONSTRAIN unique_auto UNIQUE (policy_id,vin) USING INDEX TABLESPACE index STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);
  用戶可以禁用未以性約束,但他仍然存在,禁用唯一性約束使用ALTER TABLE 語句


ALTER TABLE insured_autos DISABLE CONSTRAIN unique_name;
  刪除唯一性約束,使用ALTER TABLE....DROP CONSTRAIN語句

ALTER TABLE insured_autos DROP CONSTRAIN unique_name;
  注重用戶不能刪除在有外部鍵指向的表的唯一性約束。這種情況下用戶必須首先禁用或刪除外部鍵(foreign key)。

  刪除或禁用唯一性約束通常同時刪除相關聯的唯一索引,因而降低了數據庫性能。經常刪除或禁用唯一性約束有可能導致丟失索引帶來的性能錯誤。要避免這樣錯誤,可以采取下面的步驟:

  1、在唯一性約束保護的數據列上創建非唯一性索引。

  2、添加唯一性約束

  主鍵(Primary Key)約束

  表有唯一的主鍵約束。表的主鍵可以保護一個或多個列,主鍵約束可與NOT NULL約束共同作用于每一數據列。NOT NULL約束和唯一性約束的組合將保證主鍵唯一地標識每一行。像唯一性約束一樣,主鍵由B-tree索引增強。

  創建主鍵約束使用CREATE TABLE語句與表一起創建,假如表已經創建了,可以使用ALTER TABLE語句。

CREATE TABLE policies
(policy_id NUMBER CONSTRAINT pk_policies PRIMARY KEY,
holder_name VARCHAR2(40),
gender VARCHAR2(1),
marital_status VARCHAR2(1),
date_of_birth DATE
);
  與唯一性約束一樣,假如主鍵約束保護多個數據列,那么必須作為一個表約束創建。

CREATE TABLE insured_autos
(policy_id NUMBER,
vin VARCHAR2(40),
coverage_begin DATE,
coverage_term NUMBER,
CONSTRAINT pk_insured_autos PRIMARY KEY (policy_id,vin)
USING INDEX TABLESPACE index
STORAGE (INITIAL 1M NEXT 10M PCTINCREASE 0)
);
  禁用或刪除主鍵必須與ALTER TABLE 語句一起使用

ALTER TABLE policies DROP PRIMARY KEY;
  或

ALTER TABLE policies DISABLE PRIMARY KEY;
  外部鍵約束(Foreign key constraint)

  外部鍵約束保護一個或多個數據列,保證每個數據行的數據包含一個或多個null值,或者在保護的數據列上同時擁有主鍵約束或唯一性約束。引用(主鍵或唯一性約束)約束可以保護同一個表,也可以保護不同的表。與主鍵和唯一性約束不同外部鍵不會隱式建立一個B-tree索引。在處理外部鍵時,我們經常使用術語父表(parent table)和子表(child table),父表表示被引用主鍵或唯一性約束的表,子表表示引用主鍵和唯一性約束的表。

  創建外部鍵使用CREATE TABLE語句,假如表已經建立了,那么使用ALTER TABLE語句。

CREATE TABLE insured_autos
(policy_id NUMBER CONSTRAINT policy_fk
REFERENCE policies(policy_id
ON DELETE CASCADE,
vin VARCHAR2(40),
coverage_begin DATE,
coverage_term NUMBER,
make VARCHAR2(30),
model VARCHAR(30),
year NUMBER,
CONSTRAIN auto_fk FROEIGN KEY (make,model,year)
REFERENCES automobiles (make,model,year)
ON DELETE SET NULL
);

  ON DELETE子串告訴ORACLE假如父紀錄(parent record)被刪除后,子記錄做什么。缺省情況下禁止在子記錄還存在的情況下刪除父紀錄。

  外部鍵和NULL值

  在外部鍵約束保護的數據列中NULL值的處理可能產生不可預料的結果。ORACLE 使用ISO standar Match None規則增強外部鍵約束。這個規則規定假如任何外部鍵作用的數據列包含有一個NULL值,那么任何保留該鍵的數據列在父表中沒有匹配值。

  比如,在父表AUTOMOBILES中,主鍵作用于數據列MAKE,MODEL,YEAR上,用戶使用的表INSURED_AUTOS有一個外部約束指向AOTOMOBILES,注重在INSURES_AUTOS中有一數據行的MODEL列為NULL值,這一行數據已經通過約束檢查,即使MAKE列也沒有顯示在父表AUTOMOBILES中,如下表:

  表1 AUTOMOBILES

MAKE MODEL YEARFord Taurus2000ToyotaCamry 1999
  表2 INSURED_AUTOS

POLICY_IDMAKE MODEL YEAR576 Ford Taurus 2000577 ToyotaCamry 1999 578 TUCker NULL 1949
  延遲約束檢驗(Deferred Constraint Checking)

  約束檢驗分兩種情況,一種是在每一條語句結束后檢驗數據是否滿足約束條件,這種檢驗稱為立即約束檢驗(immediately checking),另一種是在事務處理完成之后對數據進行檢驗稱之為延遲約束檢驗。在缺省情況下Oracle約束檢驗是立即檢驗(immediately checking),假如不滿足約束將先是一條錯誤信息,但用戶可以通過SET CONSTRAINT語句選擇延遲約束檢驗。語法如下:


SET CONSTRAINT constraint_nameALL DEFEERREDIMMEDIATE --; 序列(Sequences)

  Oracle序列是一個連續的數字生成器。序列常用于人為的要害字,或給數據行排序否則數據行是無序的。像約束一樣,序列只存在于數據字典中。序列號可以被設置為上升、下降,可以沒有限制或重復使用直到一個限制值。創建序列使用SET SEQUENCE語句。

CREATE SEQUENCE [schema] sequence KEYWord
  KEYWORD包括下面的值:


KEYWORD 描述START WITH 定義序列生成的第一個數字,缺省為1INCREMENT BY 定義序列號是上升還是下降,對于一個降序的序列INCREMENT BY為負值MINVALUE 定義序列可以生成的最小值,這是降序序列中的限制值。缺省情況下該值為NOMINVALUE,NOMINVALUE,對于升序為1,對于降序為-10E26.MAXVALUE 序列能生成的最大數字。這是升序序列中的限制值,缺省的MAXVALUE為NOMAXVALUE,NOMAXVALUE,對于升序為10E26,對于降序為-1。CYCLE 設置序列值在達到限制值以后可以重復NOCYCLE 設置序列值在達到限制值以后不能重復,這是缺省設置。當試圖產生MAXVALUE+1的值時,將會產生一個異常CACHE 定義序列值占據的內存塊的大小,缺省值為20NOCACHE 在每次序列號產生時強制數據字典更新,保證在序列值之間沒有間隔當創建序列時,START WITH值必須等于或大于MINVALUE。
  刪除序列使用DROP SEQUENCE語句

DROP SEQUENCE sequence_name

  索引(INDEXES)

  索引是一種可以提高查詢性能的數據結構,在這一部分我們將討論索引如何提高查詢性能的。ORACLE提供了以下幾種索引:

   B-Tree、哈希(hash)、位圖(bitmap)等索引類型
   基于原始表的索引
   基于函數的索引
   域(Domain)索引

  實際應用中主要是B-Tree索引和位圖索引,所以我們將集中討論這兩種索引類型。

  B-Tree索引

  B-Tree索引是最普通的索引,缺省條件下建立的索引就是這種類型的索引。B-Tree索引可以是唯一或非唯一的,可以是單一的(基于一列)或連接的(多列)。B-Tree索引在檢索高基數數據列(高基數數據列是指該列有很多不同的值)時提供了最好的性能。對于取出較小的數據B-Tree索引比全表檢索提供了更有效的方法。但當檢查的范圍超過表的10%時就不能提高取回數據的性能。正如名字所暗示的那樣,B-Tree索引是基于二元樹的,由枝干塊(branch block)和樹葉塊(leaf block)組成,枝干塊包含了索引列(要害字)和另一索引的地址。樹葉塊包含了要害字和給表中每個匹配行的ROWID。

  位圖索引

  位圖索引主要用于決策支持系統或靜態數據,不支持行級鎖定。位圖索引可以是簡單的(單列)也可以是連接的(多列),但在實踐中絕大多數是簡單的。位圖索引最好用于低到中群集(cardinality)列,在這些列上多位圖索引可以與AND或OR操作符結合使用。位圖索引使用位圖作為鍵值,對于表中的每一數據行位圖包含了TRUE(1)、FALSE(0)、或NULL值。位圖索引的位圖存放在B-Tree結構的頁節點中。B-Tree結構使查找位圖非常方便和快速。另外,位圖以一種壓縮格式存放,因此占用的磁盤空間比B-Tree索引要小得多。

  同義詞(Synonyms)

  對另一個數據對象而言同義詞是一個別名。public同義詞是針對所有用戶的,相對而言private同義詞則只針對對象擁有者或被授予權限的賬戶。在本地數據庫中同義詞可以表示表、視圖、序列、程序、函數或包等數據對象,也可以通過鏈接表示另一個數據庫的對象。

  創建同義詞語法如下:

CREATE [PUBLIC] SYNONYM synonym_name FOR [schema.] object[@db_link];  
  例:

CREATE PUBLIC SYNONYM policies FOR poladm.policies@prod;

CREATE SYNONYM plan_table FOR system.plan_table;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频第一页| 日韩在线观看视频免费| 亚洲国产成人精品女人久久久| 国产日韩换脸av一区在线观看| 亚洲xxxx妇黄裸体| 欧美麻豆久久久久久中文| 亚洲va电影大全| 国产成人精品av| 91欧美激情另类亚洲| 日韩精品在线免费观看| 亚洲一区二区三区视频播放| 国产91av在线| 成人久久精品视频| 亚洲人永久免费| 欧美中文在线免费| 亚洲欧美制服综合另类| 在线视频日韩精品| 8x拔播拔播x8国产精品| 国产伦精品一区二区三区精品视频| 色噜噜国产精品视频一区二区| 欧美第一淫aaasss性| 亚洲欧洲成视频免费观看| 清纯唯美日韩制服另类| 欧美成年人在线观看| 欧美人与性动交| 亚洲最大福利网| 亚洲欧美在线磁力| 国产精品视频1区| 成人性生交xxxxx网站| 91精品视频免费观看| 欧美午夜精品伦理| 上原亚衣av一区二区三区| 91欧美精品成人综合在线观看| 最近中文字幕2019免费| 国产成人在线亚洲欧美| 26uuu日韩精品一区二区| 国产精品人人做人人爽| 欧美激情伊人电影| 7m第一福利500精品视频| 正在播放欧美视频| 色婷婷综合成人| 国产精品444| 久久深夜福利免费观看| 色妞在线综合亚洲欧美| 久久久999国产精品| www.亚洲天堂| 中文字幕av日韩| 第一福利永久视频精品| 国产精品美女午夜av| 久久久久久久久91| 日韩av网站电影| 久久久国产一区二区| 欧美日韩一区二区免费在线观看| 国产丝袜高跟一区| 亚洲四色影视在线观看| zzijzzij亚洲日本成熟少妇| 国产欧美精品一区二区| 亚洲欧美中文日韩在线v日本| 成人黄色免费网站在线观看| 亚洲成人久久久| 午夜精品一区二区三区视频免费看| 国产成人综合亚洲| 国产亚洲人成网站在线观看| 亚洲免费成人av电影| 国产精品日日摸夜夜添夜夜av| 91精品视频在线免费观看| 国产精品久久综合av爱欲tv| 色小说视频一区| 韩剧1988在线观看免费完整版| 日韩av电影在线播放| 欧美日韩中国免费专区在线看| 欧美视频在线视频| 俺也去精品视频在线观看| 国产成人中文字幕| 欧美日韩国产va另类| 97在线看福利| 欧美综合国产精品久久丁香| 成人妇女免费播放久久久| 中国china体内裑精亚洲片| 欧美国产日韩xxxxx| 成人免费看吃奶视频网站| 日韩av中文字幕在线| 久久久999成人| 国产精品一区二区久久精品| 日韩毛片在线观看| 欧美日韩中文字幕日韩欧美| 欧美在线激情网| 国产亚洲福利一区| 欧美电影免费观看高清| 神马久久桃色视频| 91成人福利在线| 亚洲国产日韩精品在线| 亚洲毛片一区二区| 97在线视频精品| 亚洲综合在线做性| 亚洲精品日韩久久久| 国产精品一二三在线| 国产欧美精品xxxx另类| 欧美寡妇偷汉性猛交| 狠狠色狠色综合曰曰| 97精品一区二区视频在线观看| 精品调教chinesegay| 精品久久香蕉国产线看观看gif| 亚洲香蕉成视频在线观看| 国产精品久久久久久久久久久久久久| 美女撒尿一区二区三区| 欧美大肥婆大肥bbbbb| 久久天天躁夜夜躁狠狠躁2022| 国产精品黄页免费高清在线观看| 国内精品视频久久| 国产成人鲁鲁免费视频a| 日韩成人免费视频| 精品亚洲夜色av98在线观看| 欧美丰满少妇xxxxx| 欧美亚洲国产日本| 黄色一区二区三区| 国产精品18久久久久久首页狼| 日韩av毛片网| 欧美性xxxxxxxxx| 国产精品视频久久久| 伊人久久综合97精品| 国产精品亚洲激情| 亚洲人成在线观看网站高清| 久久亚洲精品中文字幕冲田杏梨| 久久久噜久噜久久综合| 日韩精品极品在线观看| 色爱av美腿丝袜综合粉嫩av| 日韩av在线精品| 国产精品露脸av在线| 日韩av在线看| 81精品国产乱码久久久久久| 亚洲国产另类 国产精品国产免费| 成人乱色短篇合集| 国产69久久精品成人| 午夜精品久久久久久久99热| 38少妇精品导航| 伊人久久综合97精品| 96pao国产成视频永久免费| 亚洲国产精品系列| 国产亚洲视频中文字幕视频| 国产精品免费网站| 亚洲九九九在线观看| 久久久久久久97| 亚洲最大成人免费视频| 欧美日韩国产va另类| 亚洲视频999| 国产午夜精品一区二区三区| 懂色aⅴ精品一区二区三区蜜月| 欧美日韩国产一区中文午夜| 日韩在线免费高清视频| 91久久在线视频| 亚洲人午夜精品免费| 亚洲视频免费一区| 久久精品中文字幕免费mv| 人体精品一二三区| 国产福利精品视频| 国产精品电影一区| 午夜精品理论片| 久久男人的天堂| 久久69精品久久久久久国产越南| 一区二区在线免费视频| 精品国偷自产在线| 欧美视频一区二区三区…| 丝袜一区二区三区|