真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle外鍵如何創(chuàng)建 Oracle創(chuàng)建外鍵

在oracle數(shù)據(jù)庫中怎樣創(chuàng)建主外鍵關(guān)系

主外鍵需要依托多表來創(chuàng)建,方法如下:

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的額濟(jì)納網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

創(chuàng)建主表:

CREATE?TABLE?SCOTT.DEPT?

(DEPTNO?NUMBER(2,0)?PARIMARY?KEY,?

DNAME?VARCHAR2(14),?

LOC?VARCHAR2(13));

創(chuàng)建副表及外鍵:

CREATE?TABLE?EMP?

(EMPNO?NUMBER(4,0)?PRIMARY?KEY,?

ENAME?VARCHAR2(10),?

JOB?VARCHAR2(9),?

MGR?NUMBER(4,0),?

HIREDATE?DATE,?

SAL?NUMBER(7,2),?

COMM?NUMBER(7,2),?

DEPTNO?NUMBER(2,0),

CONSTRAINT?FK_DEPTNO?FOREIGN?KEY?(DEPTNO)?REFERENCES?DEPT?(DEPTNO));

oracle怎么創(chuàng)建外鍵?

create TABLE zhao(\x0d\x0a id number primary key,\x0d\x0a mingcheng nvarchar2(50),\x0d\x0a neirong nvarchar2(50),\x0d\x0a jiezhiriqi date,\x0d\x0a zhuangtai nvarchar2(50)\x0d\x0a);\x0d\x0acreate TABLE tou(\x0d\x0a id number primary key,\x0d\x0a zhao_id number,\x0d\x0a toubiaoqiye nvarchar2(50),\x0d\x0a biaoshuneirong nvarchar2(50),\x0d\x0a toubiaoriqi date,\x0d\x0a baojia number,\x0d\x0a zhuangtai nvarchar2(50),\x0d\x0a foreign KEY(zhao_id) REFERENCES zhao(id)\x0d\x0a);\x0d\x0aforeign key (zhao_id) references to zhao(id)\x0d\x0a多了個(gè)to

Oracle定義約束外鍵約束

;?? 外鍵約束保證參照完整性 外鍵約束限定了一個(gè)列的取值范圍 一個(gè)例子就是限定州名縮寫在一個(gè)有限值集合中 這個(gè)值集合是另外一個(gè)控制結(jié)構(gòu)——一張父表

下面我們創(chuàng)建一張參照表 它提供了完整的州縮寫列表 然后使用參照完整性確保學(xué)生們有正確的州縮寫 第一張表是州參照表 State作為主鍵

CREATE TABLE state_lookup(state????? VARCHAR ( ) ? state_desc VARCHAR ( )) TABLESPACE student_data; ALTER TABLE state_lookup? ADD CONSTRAINT pk_state_lookup PRIMARY KEY (state)? USING INDEX TABLESPACE student_index;

然后插入幾行記錄

INSERT INTO state_lookup VALUES ( CA California );INSERT INTO state_lookup VALUES ( NY New York );INSERT INTO state_lookup VALUES ( NC North Carolina );

我們通過實(shí)現(xiàn)父子關(guān)系來保證參照完整性 圖示如下

外鍵字段存在于Students表中|State_lookup? |? 是State字段 ?? 一個(gè)外鍵必須參照主鍵或Unique字段?|?????????? 這個(gè)例子中 我們參照的是State字段?|?????????? 它是一個(gè)主鍵字段(參看DDL)?????????? /|\? |? Students??? |?

上圖顯示了State_Lookup表和Students表間一對多的關(guān)系 State_Lookup表定義了州縮寫通用集合——在表中每一個(gè)州出現(xiàn)一次 因此 State_Lookup表的主鍵是State字段

State_Lookup表中的一個(gè)州名可以在Students表中出現(xiàn)多次 有許多學(xué)生來自同一個(gè)州 一次 在表State_Lookup和Students之間參照完整性實(shí)現(xiàn)了一對多的關(guān)系

外鍵同時(shí)保證Students表中State字段的完整性 每一個(gè)學(xué)生總是有個(gè)State_lookup表中成員的州縮寫

外鍵約束創(chuàng)建在子表 下面在students表上創(chuàng)建一個(gè)外鍵約束 State字段參照state_lookup表的主鍵

創(chuàng)建表

CREATE TABLE students(student_id??? VARCHAR ( ) NOT NULL student_name? VARCHAR ( ) NOT NULL college_major VARCHAR ( ) NOT NULL status??????? VARCHAR ( ) NOT NULL state???????? VARCHAR ( ) license_no??? VARCHAR ( )) TABLESPACE student_data;

創(chuàng)建主鍵

ALTER TABLE studentsADD CONSTRAINT pk_students PRIMARY KEY (student_id)USING INDEX TABLESPACE student_index;

創(chuàng)建Unique約束

ALTER TABLE studentsADD CONSTRAINT uk_students_licenseUNIQUE (state license_no)USING INDEX TABLESPACE student_index;

創(chuàng)建Check約束

ALTER TABLE studentsADD CONSTRAINT ck_students_st_licCHECK ((state IS NULL AND license_no IS NULL) OR(state IS NOT NULL AND license_no is NOT NULL));

創(chuàng)建外鍵約束

ALTER TABLE studentsADD CONSTRAINT fk_students_stateFOREIGN KEY (state) REFERENCES state_lookup (state);

一 Errors的四種類型

參照完整性規(guī)則在父表更新刪除期間和子表插入更新期間強(qiáng)制執(zhí)行 被參照完整性影響的SQL語句是 PARENT UPDATE?? 父表更新操作? 不能把State_lookup表中的state值更新為students表仍在使用而State_lookup表中卻沒有的值

PARENT DELETE?? 父表刪除操作? 不能刪除State_lookup表中的state值后導(dǎo)致students表仍在使用而state_lookup表中卻沒有這個(gè)值

CHILD INSERT??? 子表插入操作? 不能插入一個(gè)state_llokup表中沒有的state的值CHILD UPDATE??? 子表更新操作? 不能把state的值更新為state_lookup表中沒有的state的值

下面示例說明四種錯(cuò)誤類型

測試表結(jié)構(gòu)及測試數(shù)據(jù)如下

STATE_LOOKUP State????????? State DescriptionCA???????????? CaliforniaNY???????????? New YorkNC???????????? North Carolina STUDENTS Student ID??? Student Name??? College Major??? Status??? State????? License NOA ????????? John??????????? Biology????????? Degree???? NULL????? NULLA ????????? Mary??????????? Math/Science???? Degree???? NULL????? NULLA ????????? Kathryn???????? History????????? Degree???? CA??????? MV A ????????? Steven????????? Biology????????? Degree???? NY??????? MV A ????????? William???????? English????????? Degree???? NC??????? MV

) PARENT UPDATE

SQL UPDATE state_lookup? ? SET state = XX ? ? WHERE state = CA ; UPDATE state_lookup*ERROR at line :ORA : integrity constraint (SCOTT FK_STUDENTS_STATE)violated 每 child record found

) PARENT DELETE

SQL DELETE FROM state_lookup???? ? WHERE state = CA ; DELETE FROM state_lookup*ERROR at line :ORA : integrity constraint (SCOTT FK_STUDENTS_STATE)violated 每 child record found

) CHILD INSERT

SQL INSERT INTO STUDENTS? ? VALUES ( A ? ? Joseph History Degree XX MV ); INSERT INTO STUDENTS*ERROR at line :ORA : integrity constraint (SCOTT FK_STUDENTS_STATE)violated parent key not found

) CHILD UPDATE

SQL UPDATE students? ? SET state = XX ? ? WHERE student_id = A ; UPDATE students*ERROR at line :ORA : integrity constraint (SCOTT FK_STUDENTS_STATE)violated parent key not found

上面四種類型錯(cuò)誤都有一個(gè)同樣的錯(cuò)誤代碼 ORA

參照完整性是數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵一部分 一個(gè)既不是其他表的父表也不是子表的表是非常少的

二 級(jí)聯(lián)刪除

外鍵語法有個(gè)選項(xiàng)可以指定級(jí)聯(lián)刪除特征 這個(gè)特征僅作用于父表的刪除語句

使用這個(gè)選項(xiàng) 父表的一個(gè)刪除操作將會(huì)自動(dòng)刪除所有相關(guān)的子表記錄

使用創(chuàng)建外鍵約束的DELETE CASCADE選項(xiàng) 然后跟著一條delete語句 刪除state_lookup表中California的記錄及students表中所有有California執(zhí)照的學(xué)生

ALTER TABLE studentsADD CONSTRAINT fk_students_stateFOREIGN KEY (state) REFERENCES state_lookup (state)ON DELETE CASCADE;執(zhí)行刪除語句 DELETE FROM state_lookup WHERE state = CA ;

然后再查詢students表中的數(shù)據(jù) 就沒有了字段state值為CA的記錄了

如果表間有外鍵關(guān)聯(lián) 但沒有使用級(jí)聯(lián)刪除選項(xiàng) 那么刪除操作將會(huì)失敗

定義一個(gè)級(jí)聯(lián)刪除時(shí)需要考慮下面問題

級(jí)聯(lián)刪除是否適合本應(yīng)用?從一個(gè)父參照表的以外刪除不應(yīng)該刪除客戶帳號(hào)

定義的鏈?zhǔn)鞘裁矗坎榭幢砼c其他表的關(guān)聯(lián) 考慮潛在的影響和一次刪除的數(shù)量級(jí)及它會(huì)帶來什么樣的影響

如果不能級(jí)聯(lián)刪除 可設(shè)置子表外鍵字段值為null 使用on delete set null語句(外鍵字段不能設(shè)置not null約束)

ALTER TABLE studentsADD CONSTRAINT fk_students_stateFOREIGN KEY (state) REFERENCES state_lookup (state)ON DELETE SET NULL;

三 參照字段語法結(jié)構(gòu)

創(chuàng)建外鍵約束是 外鍵字段參照父表的主鍵或Unique約束字段 這種情況下可以不指定外鍵參照字段名 如下 ALTER TABLE students ADD CONSTRAINT fk_students_state FOREIGN KEY (state) REFERENCES state_lookup 當(dāng)沒有指定參照字段時(shí) 默認(rèn)參照字段是父表的主鍵

如果外鍵字段參照的是Unique而非Primary Key字段 必須在add constraint語句中指定字段名

四 不同用戶模式和數(shù)據(jù)庫實(shí)例間的參照完整性

lishixinzhi/Article/program/Oracle/201311/17654

oracle創(chuàng)建外鍵

create TABLE zhao(

id number primary key,

mingcheng nvarchar2(50),

neirong nvarchar2(50),

jiezhiriqi date,

zhuangtai nvarchar2(50)

);

create TABLE tou(

id number primary key,

zhao_id number,

toubiaoqiye nvarchar2(50),

biaoshuneirong nvarchar2(50),

toubiaoriqi date,

baojia number,

zhuangtai nvarchar2(50),

foreign KEY(zhao_id) REFERENCES zhao(id)

);

foreign key (zhao_id) references to zhao(id)

多了個(gè)to


網(wǎng)頁名稱:oracle外鍵如何創(chuàng)建 Oracle創(chuàng)建外鍵
本文鏈接:http://weahome.cn/article/hhjjho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部