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
在江山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營(yíng)銷,成都外貿(mào)網(wǎng)站建設(shè)公司,江山網(wǎng)站建設(shè)費(fèi)用合理。
以oracle自帶的用戶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表的外鍵
);
1、外鍵是屬于約束的一種,所謂約束顧名思義,就是限制你在數(shù)據(jù)庫(kù)的操作。而你對(duì)數(shù)據(jù)庫(kù)有什么操作,無(wú)非是增、刪、改、查,外鍵起的作用就是讓你在數(shù)據(jù)庫(kù)幫助的情況下更合理的增加數(shù)據(jù)的正確度。
2、所以,外鍵只是輔助,并不能起到你說(shuō)的【B.NAME是否也自動(dòng)出現(xiàn)張三兩個(gè)字】。
3、外鍵的作用是能夠避免如下情況。
如
【班級(jí)信息表】存放的是班級(jí)信息表。
【學(xué)生表】存放的是學(xué)生信息,包含班級(jí)信息。
這個(gè)時(shí)候 在【學(xué)生表】中存放的班級(jí)信息應(yīng)該在【班級(jí)信息表】存在才合法,自己人為控制的話難免有漏掉的情況,用外鍵則可以讓數(shù)據(jù)庫(kù)自動(dòng)控制,當(dāng)插入【學(xué)生表】中的數(shù)據(jù)在【班級(jí)信息表】不存在的時(shí)候,數(shù)據(jù)庫(kù)不允許插入。
---
以上,希望對(duì)你有所幫助。
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
oracle創(chuàng)建外鍵約束有兩種方法:
1、創(chuàng)建表時(shí)直接創(chuàng)建外鍵約束
create?table?books(
bookid?number(10)?not?null?primary?key,
bookName?varchar2(20)?not?null,
price?number(10,2),
categoryId?number(10)?not?null?references?Category(id)??--外鍵約束
);
2、先創(chuàng)建表,表創(chuàng)建成功后,單獨(dú)添加外鍵約束
create?table?books(
bookid?number(10)?not?null?primary?key,
bookName?varchar2(20)?not?null,
price?number(10,2),
categoryId?number(10)?not?null
);
ALTER?TABLE??books?ADD?CONSTRAINT?FK_Book_categoryid?FOREIGN?KEY(categoryId?)?REFERENCES?Category(id);
特總結(jié)了Oracle和DB2數(shù)據(jù)庫(kù)下如何禁用外鍵約束的方法。
一、Oracle數(shù)據(jù)庫(kù):
禁用約束基本語(yǔ)法:
alter table 數(shù)據(jù)庫(kù)表名 disable constraint 約束名
假設(shè)現(xiàn)在需要關(guān)閉pub_organ的外鍵約束:
1、 首先查詢pub_organ存在哪些外鍵約束,此時(shí)需要用到oracle的字典表user_constraints。
select * from user_constraints where table_name='PUB_ORGAN';
上圖就是查詢結(jié)果,其中各字段含義如下:
OWNER: 表的所有者
CONSTRAINT_NAME: 約束名稱
CONSTRAINT_TYPE: 約束類型(R代表外鍵,P代表主鍵,C代表check約束)
TABLE_NAME: 表名稱
SEARCH_CONDITION: check約束的具體信息
STATUS: ENABLED表示當(dāng)前約束是啟用的,DISABLED表示當(dāng)前約束未啟用。
2、 查詢出表存在哪些約束后,即可以通過(guò)alter語(yǔ)句啟用或禁用指定的約束了。
如禁用pub_organ表的外鍵PUBORGAN_FK1,則可以使用如下命令實(shí)現(xiàn):
alter table PUB_ORGAN disable constraint PUBORGAN_FK1;
執(zhí)行后,再次查詢字典表user_constraints,如下:
此時(shí)往數(shù)據(jù)庫(kù)表pub_organ中插入數(shù)據(jù)時(shí)就不再受外鍵約束的影響了。
啟用約束基本語(yǔ)法:
alter table 數(shù)據(jù)庫(kù)表名 enable constraint 約束名
如現(xiàn)在需要重新啟用pub_organ的外鍵約束,可以使用如下命令:
alter table PUB_ORGAN enable constraint PUBORGAN_FK1;
二、DB2數(shù)據(jù)庫(kù):
禁用約束基本語(yǔ)法:
ALTER TABLE 表名稱 ALTER FOREIGN KEY 約束名稱 NOT ENFORCED
啟用約束基本語(yǔ)法:
ALTER TABLE 表名稱 ALTER FOREIGN KEY 約束名稱 ENFORCED
相關(guān)字典表:SYSIBM.SYSTABCONST
如:select * from SYSIBM.SYSTABCONST where tbname='PUB_ORGAN';
各字段含義如下:
NAME: 約束名稱
DEFINER: 定義者
CONSTRAINTTYP: 約束類型(P代表主鍵,F(xiàn)代表外鍵)
TBNAME: 表名稱
ENFORCED: 是否啟用(Y代表啟用,N代表未啟用)
三、封裝成java接口、批量執(zhí)行
在實(shí)際工作中,經(jīng)常會(huì)將若干個(gè)表,或者所有數(shù)據(jù)庫(kù)表的外鍵一起禁用,此時(shí)需要批量執(zhí)行相關(guān)命令,筆者根據(jù)工作實(shí)際,使用java封裝了相關(guān)接口,以方便使用。
對(duì)外暴露接口如下:
/*
* 啟用當(dāng)前用戶指定tableName的所有外鍵約束
* 入?yún)⑹褂每勺儏?shù)(jdk5新特性)
* 調(diào)用方式:
* 1、enableFK("pub_organ")
* 2、enableFK("pub_organ","pub_stru")
* 3、enableFK(new String[]{"pub_organ","pub_stru"})
*/
public static void enableFK(String...tableNames){
disableORenbaleFK(true,tableNames);
}
/*
* 禁用當(dāng)前用戶指定tableName的所有外鍵約束
*/
public static void disableFK(String...tableNames){
disableORenbaleFK(false,tableNames);
}
/*
* 啟用當(dāng)前用戶所有表的外鍵約束
*/
public static void enableAllFK(){
disableORenableAllConstraint(true);
}
/*
* 禁用當(dāng)前用戶所有表的外鍵約束
*/
public static void disableAllFK(){
disableORenableAllConstraint(false);
}
其中核心處理代碼如下:
if(tableNames==null||tableNames.length==0){
throw new RuntimeException("入?yún)ableNames不能為空!");
}
//查詢指定表的外鍵約束
String sql = null;
String dbType = getDBType();
if(dbType.contains("ORACLE")){
sql = "select 'alter table ' || table_name || ' disable constraint ' || constraint_name from user_constraints where constraint_type='R' and TABLE_NAME in(";
if(isEnable){
sql = sql.replace("disable", "enable");
}
}else if(dbType.contains("DB2")){
sql = "select 'ALTER TABLE ' || TBNAME || ' ALTER FOREIGN KEY ' || NAME ||' NOT ENFORCED ' FROM SYSIBM.SYSTABCONST WHERE CONSTRAINTYP='F' and TBNAME in(";
if(isEnable){
sql = sql.replace("NOT ENFORCED", "ENFORCED");
}
}else{
throw new RuntimeException("數(shù)據(jù)庫(kù)類型無(wú)效(僅支持Oracle和DB2),dbType="+dbType);
}
StringBuffer generateSQL = new StringBuffer(sql);
for(int i=0;itableNames.length;i++){
generateSQL.append(" '");
generateSQL.append(tableNames[i].toUpperCase());//注意須轉(zhuǎn)換成大寫(xiě)
generateSQL.append("',");
}
generateSQL.deleteCharAt(generateSQL.length()-1);
generateSQL.append(")");
ListMapString, Object dataSet = DBTool.executeQuery(generateSQL.toString());
//啟用or停止查詢出的外鍵約束
for(int i=0;idataSet.size();i++){
MapString, Object record = dataSet.get(i);
IteratorEntryString, Object itor = record.entrySet().iterator();
while(itor.hasNext())
{
EntryString, Object e = itor.next();
DBTool.executeUpdate(e.getValue().toString(),UpdateType.ALTER);
}
}
分享文章:oracle怎么激活外鍵,oracle增加外鍵
瀏覽路徑:http://chinadenli.net/article6/hddiig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站排名、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)