日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer外鍵的更新的實際操作規(guī)則

此文主要向大家講述的是SQL Server 外鍵的更新(刪除)的實際操作規(guī)則,以前用數(shù)據(jù)庫德 時候一般都建表關(guān)系,但是把這些關(guān)系建好了之后往往都用不上,這次寫一個項目,涉及到多表的SQL Server 外鍵約束和級聯(lián)刪除的問題,才研究了一下.

創(chuàng)新互聯(lián)建站專注于洋縣網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供洋縣營銷型網(wǎng)站建設(shè),洋縣網(wǎng)站制作、洋縣網(wǎng)頁設(shè)計、洋縣網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造洋縣網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供洋縣網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

用的vs2005里面自帶的SqlExpress,在VS里面作數(shù)據(jù)庫,感覺不是很方便(廢話,都方便了,那sqlserver2005 dev 賣給誰去!)

我建了表,然后建了關(guān)系,設(shè)定了外鍵約束.

然后就以為萬事大吉了,去寫代碼,畫界面去了.

把代碼和界面搞定后,一試驗刪除,刪除的級聯(lián)鏈中間的一個表的數(shù)據(jù),然后就報錯.

Title

DELETE 語句與 REFERENCE 約束"FK_課程擴展信息表_教師表"沖突。該沖突發(fā)生于數(shù)據(jù)庫"x:\xxx.MDF",表"dbo.課程擴展信息表", column '教師編號'。

語句已終止。

然后研究了下SQL Server 外鍵約束.到底是怎么回事.網(wǎng)上搜到一篇定義:

Title

FOREIGN KEY 約束

如果在 FOREIGN KEY 約束的列中輸入非 NULL 值,則此值必須在被引用的列中存在,否則將返回違反外鍵約束的錯誤信息。

FOREIGN KEY 約束應(yīng)用于前面所講的列,除非指定了源列。

FOREIGN KEY 約束僅能引用位于同一服務(wù)器上的同一數(shù)據(jù)庫中的表。數(shù)據(jù)庫間的引用完整性必須通過觸發(fā)器實現(xiàn)。有關(guān)更多信息,請參見 CREATE TRIGGER。

FOREIGN KEY 可以引用同一表中的其它列(自引用)。

列級 FOREIGN KEY 約束的 REFERENCES 子句僅能列出一個引用列,且該列必須與定義約束的列具有相同的數(shù)據(jù)類型。

表級 FOREIGN KEY 約束的 REFERENCES 子句中引用列的數(shù)目必須與約束列列表中的列數(shù)相同。每個引用列的數(shù)據(jù)類型也必須與列表中相應(yīng)列的數(shù)據(jù)類型相同。

如果 timestamp 類型的列是SQL Server 外鍵或被引用鍵的一部分,則不能指定 CASCADE。

可以在相互間具有引用關(guān)系的表上組合使用 CASCADE 和 NO ACTION。如果 SQL Server 遇到 NO ACTION,將終止執(zhí)行語句并回滾相關(guān)的 CASCADE 操作。當(dāng) DELETE 語句導(dǎo)致 CASCADE 和 NO ACTION 組合操作時,在 SQL Server 檢查 NO ACTION 操作之前將執(zhí)行所有 CASCADE 操作。

一個表最多可包含 253 個 FOREIGN KEY 約束。

對于臨時表不強制 FOREIGN KEY 約束。

每個表在其 FOREIGN KEY 約束中最多可以引用 253 個不同的表。

FOREIGN KEY 約束只能引用被引用表的 PRIMARY KEY 或 UNIQUE 約束中的列或被引用表上 UNIQUE INDEX 中的列。

仍然不解其意.

然后在關(guān)系圖中的關(guān)系上點擊右鍵,查看屬性,發(fā)現(xiàn)其"INSERT 和 UPDATE 規(guī)范類別 "內(nèi)都是"無操作",感覺應(yīng)該是這里的問題.

上msdn上搜索了一下,發(fā)現(xiàn)了這篇文章: 可視化數(shù)據(jù)庫工具-外鍵列屬性

ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vdt01/html/2cb23e81-6342-4390-9d0e-b7a4805eca0f.htm

關(guān)鍵的幾句在這里:

Title

INSERT 和 UPDATE 規(guī)范類別

展開以顯示有關(guān)該關(guān)系的“刪除規(guī)則”和“更新規(guī)則”的信息。

刪除規(guī)則

指定當(dāng)數(shù)據(jù)庫的最終用戶嘗試刪除某一行,而該行包含外鍵關(guān)系所涉及的數(shù)據(jù)時所發(fā)生的情況。如果設(shè)置為:

無操作 顯示一條錯誤信息,告知用戶不允許執(zhí)行該刪除操作,DELETE 將被回滾。

級聯(lián) 刪除包含外鍵關(guān)系中所涉及的數(shù)據(jù)的所有行。

設(shè)置空 如果表的所有外鍵列都可接受空值,則將該值設(shè)置為空。僅適用于 SQL Server 2005。

設(shè)置默認(rèn)值 如果表的所有外鍵列均已定義默認(rèn)值,則將該值設(shè)置為列定義的默認(rèn)值。僅適用于 SQL Server 2005。

更新規(guī)則

指定當(dāng)數(shù)據(jù)庫的用戶嘗試更新某一行,而該行包含SQL Server 外鍵關(guān)系所涉及的數(shù)據(jù)時所發(fā)生的情況。如果設(shè)置為:

無操作 顯示一條錯誤信息,告知用戶不允許執(zhí)行該刪除操作,DELETE 將被回滾。

級聯(lián) 刪除包含外鍵關(guān)系中所涉及的數(shù)據(jù)的所有行。

設(shè)置空 如果表的所有外鍵列都可接受空值,則將該值設(shè)置為空。僅適用于 SQL Server 2005。

設(shè)置默認(rèn)值 如果表的所有外鍵列均已定義默認(rèn)值,則將該值設(shè)置為列定義的默認(rèn)值。僅適用于 SQL Server 2005。

總算是明白了:

1.在vs2005中,外鍵約束的屬性窗口中它不叫"級聯(lián)",叫"層疊",估計是翻譯錯誤.

2.vs2005中,在關(guān)系圖中建立外鍵約束,它"默認(rèn)的INSERT 和 UPDATE 規(guī)范"都是"無操作".

也就是說,你只要更新或刪除,它都會報錯.

3.解決的方法:

a.刪除的時候好辦,級聯(lián)刪除就可以了.但更新的時候還得好好考慮.

b.或者干脆去掉外鍵約束,自己考慮,然后寫transcation sql.


分享題目:SQLServer外鍵的更新的實際操作規(guī)則
網(wǎng)站鏈接:http://m.5511xx.com/article/copcsgg.html