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
成都創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供博湖網(wǎng)站建設(shè)、博湖做網(wǎng)站、博湖網(wǎng)站設(shè)計(jì)、博湖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、博湖企業(yè)網(wǎng)站模板建站服務(wù),十年博湖做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
1
一個(gè)表只能有一個(gè)主鍵,但是可以用兩個(gè)字段做聯(lián)合主鍵,但針對(duì)你發(fā)上來(lái)的情況,板塊表只可以用id字段做主鍵
create?table?bk(
id?number?primary?key,
name?varchar2(50)?not?null);
然后創(chuàng)建帖子表
create?table?tz(
id?number??primary?key,
title?varchar2(50),
bkid?number,
foreign?KEY(bkid)?REFERENCES?bk(id));
注意 :一定要先創(chuàng)建bk表,再創(chuàng)建tz表
以下的文章主要是對(duì)Oracle主鍵與Oracle外鍵的實(shí)際應(yīng)用方案的介紹 此篇文章是我很然偶在一網(wǎng)站上發(fā)現(xiàn)的 如果你對(duì)Oracle主鍵與Oracle外鍵的實(shí)際應(yīng)用很感興趣的話(huà) 以下的文章就會(huì)給你提供更詳細(xì)的相關(guān)方面的知識(shí)
CREATE TABLE SCOTT MID_A_TAB
( A VARCHAR ( BYTE)
B VARCHAR ( BYTE)
DETPNO VARCHAR ( BYTE)
)TABLESPACE USERS ;
CREATE TABLE SCOTT MID_B_TAB
( A VARCHAR ( BYTE)
B VARCHAR ( BYTE)
DEPTNO VARCHAR ( BYTE)
)TABLESPACE USERS ;
給MID_A_TAB表添加主鍵
alter table mid_a_tab add constraint a_pk primary key (detpno);
給MID_B_TAB表添加Oracle主鍵
alter table mid_b_tab add constraint b_pk primary key(a);
給子表MID_B_TAB添加Oracle外鍵 并且引用主表MID_A_TAB的DETPNO列 并通過(guò)on delete cascade指定引用行為是級(jí)聯(lián)刪除
alter table mid_b_tab add constraint b_fk foreign key
(deptno) references mid_a_tab (detpno) on delete cascade;
向這樣就創(chuàng)建了好子表和Oracle主表
向主表添加數(shù)據(jù)記錄
SQL insert into mid_a_tab(a b detpno) values( );
已創(chuàng)建 行
已用時(shí)間: : :
向子表添加數(shù)據(jù)
SQL insert into mid_b_tab(a b deptno) values( );
insert into mid_b_tab values( )
*
第 行出現(xiàn)錯(cuò)誤:
ORA : 違反唯一約束條件 (SCOTT B_PK)
已用時(shí)間: : :
可見(jiàn)上面的異常信息 那時(shí)因?yàn)樽颖聿迦氲膁eptno的值是 然而此時(shí)我們主表中
detpno列只有一條記錄那就是 所以當(dāng)子表插入數(shù)據(jù)時(shí) 在父表中不能夠找到該引用
列的記錄 所以出現(xiàn)異常
但我們可以這樣對(duì)子表的數(shù)據(jù)的進(jìn)行插入(即 在子表的deptno列插入null 因?yàn)槲覀冊(cè)诮ū淼臅r(shí)候
并沒(méi)有對(duì)該列進(jìn)行not null的約束限制)
SQL insert into mid_b_tab(a b deptno) values( null);
已創(chuàng)建 行
已用時(shí)間: : :
現(xiàn)在如果我們把子表mid_b_tab中deptno列加上not null約束
SQL alter table mid_b_tab modify deptno not null;
alter table mid_b_tab modify deptno not null
*
第 行出現(xiàn)錯(cuò)誤:
ORA : 無(wú)法啟用 (SCOTT ) 找到空值
已用時(shí)間: : :
上面又出現(xiàn)異常 這是因?yàn)楝F(xiàn)在mid_b_tab表中有了一條記錄 就是我們先前添加的
那條記錄
null
現(xiàn)在我們要把該表的deptno列進(jìn)行not null約束限制 所以O(shè)racle不讓我們這樣干
那我們就只有把該表給delete或truncate掉 然后在修改deptno列為非空
SQL delete from mid_b_tab;
已刪除 行
已用時(shí)間: : :
再次修改子表mid_b_tab表的deptno列為非空
SQL alter table mid_b_tab modify deptno not null;
表已更改
已用時(shí)間: : :
修改成功!
我們?cè)俅尾迦霐?shù)據(jù)
insert into mid_b_tab(a b deptno) values( null);
試試
SQL insert into mid_b_tab(a b deptno) values( null);
insert into mid_b_tab(a b deptno) values( null)
*
第 行出現(xiàn)錯(cuò)誤:
ORA : 無(wú)法將 NULL 插入 ( SCOTT MID_B_TAB DEPTNO )
已用時(shí)間: : :
看見(jiàn)現(xiàn)在Oracle不讓我們插入空值了
所以我們?cè)趧?chuàng)建子表的Oracle外鍵約束時(shí) 該表的引用列必須要進(jìn)行not null限制 也可以在
該列創(chuàng)建unique 或primary key約束 并且引用列與被引用列的數(shù)據(jù)類(lèi)型必須相同
SQL insert into mid_b_tab(a b deptno) values( );
已創(chuàng)建 行
已用時(shí)間: : :
此時(shí)數(shù)據(jù)插入成功 因?yàn)榇藭r(shí)插入的 在主表中的被引用列中已經(jīng)存在了
現(xiàn)在我們一系列的操作
SQL select * from mid_b_tab ;
A B DE
已用時(shí)間: : :
SQL select * from mid_a_tab;
A B DE
已用時(shí)間: : :
SQL delete from mid_a_tab;
已刪除 行
lishixinzhi/Article/program/Oracle/201311/18331
以oracle自帶的用戶(hù)scott為例。
create?table?dept(
deptno?number(2)?primary?key,?--deptno?為?dept表的主鍵
dname?varchar2(10),
loc?varchar2(9)
);
create?table?emp(
empno?number(4)?primary?key,?--empno?為?emp表的主鍵
ename?varchar2(10),
job?varchar2(9),
mgr?number(4),
hiredate?date,
sal?number(7,2),
comm?number(7,2),
deptno?number(2)?references?dept(deptno)?--dept表中deptno字段?為?emp表的外鍵
);
3
stuid
number(10)
references
t_stu(stuid)
就是這個(gè)字段關(guān)聯(lián)t_stu表的stuid字段;
4
couseid
number(10),
5
constraint
fk_couseid
foreign
key(couseid)
6
references
t_couse(couseid)
7
on
delete
cascade);
這個(gè)是外鍵關(guān)聯(lián),并做同步刪除操作,就是如果t_couse表中的某個(gè)couseid數(shù)據(jù)被刪除了,那么這張表相關(guān)的數(shù)據(jù)也會(huì)自動(dòng)被刪除;跟上面的區(qū)別就在于有沒(méi)有做刪除操作;
on
delete
cascade
就是同步刪除的意思,比如t_couse表中有個(gè)couseid=5,t_score表中也有couseid=5的數(shù)據(jù),當(dāng)刪除t_couse表中couseid=5的數(shù)據(jù)時(shí),t_score表中所有couseid=5的數(shù)據(jù)也會(huì)自動(dòng)刪除;
可以寫(xiě)在同一行,但是要用逗號(hào)分格開(kāi);
望采納,碼字不容易