外來鍵技術
一、語法
FOREIGN KEY 約束主要目的是控制儲存在外來鍵表中的資料,但它還可以控制對主鍵表中資料的修改。FOREIGN KEY 約束並不僅僅只可以與另一表的 PRIMARY KEY 約束相連結,它還可以定義為引用另一表的 UNIQUE 約束。FOREIGN KEY 約束不允許空值,但是,如果任何組合 FOREIGN KEY 約束的列包含空值,則將跳過 FOREIGN KEY 約束的校驗。FOREIGN KEY 可以引用同一表中的其它列(自引用)。一個表最多可包含 253 個 FOREIGN KEY 約束。每個表在其 FOREIGN KEY 約束中最多可以引用 253 個不同的表。
列級 FOREIGN KEY 約束放在列說明部分,表級 FOREIGN KEY 約束放在全部列說明之後,用","和列說明分開。列級 FOREIGN KEY 約束的 REFERENCES 子句僅能列出一個引用列,且該列必須與定義約束的列具有相同的資料型別。 表級 FOREIGN KEY 約束的 REFERENCES 子句中引用列的數目必須與約束列列表中的列數相同。每個引用列的資料型別也必須與列表中相應列的資料型別相同。 1) 新建
作為表定義的一部分在建立表時建立。一個表可以有多個 FOREIGN KEY 約束。
< column_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor ]
[ON {filegroup | DEFAULT} ] ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
]
| CHECK [ NOT FOR REPLICATION ]
( logical_expression )
}< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
[ WITH FILLFACTOR = fillfactor ]
[ ON { filegroup | DEFAULT } ]
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ]
( search_conditions )
}2) 刪除
ALTER TABLE table_name DROP CONSTRAINT constraint_name3)修改
必須首先刪除已有的 FOREIGN KEY 約束,然後再透過新定義重新建立。
ALTER TABLE table_name DROP CONSTRAINT constraint_name
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (外來鍵表的列) REFERENCES 主鍵表(主鍵表的列)4) 主鍵表
顯示關係中主表的名稱,後面是構成主鍵的列。5) 外來鍵表
顯示關係中外來鍵表的名稱,後面是構成外來鍵的列。
二、說明
[@more@]1) 建立中檢查現存資料
在外來鍵表上新增關係時,對資料庫中已存在的資料應用約束。2) 對 INSERT 和 UPDATE 強制關係
對在外來鍵表中插入、刪除或更新的資料應用該約束。如果外來鍵表中存在匹配的行,還將禁止刪除主表中的行。3) 對複製強制關係
在將外來鍵表複製到其它資料庫時應用該約束。NOT FOR REPLICATION4) 級聯更新相關的欄位
無論何時更新主鍵值,都指示 DBMS 自動更新該關係的外來鍵值。ON UPDATE {CASCADE | NO ACTION}
如果指定 CASCADE,則在父表中更新被引用行時,也將在引用表中更新引用行;
如果指定 NO ACTION,SQL Server 將產生一個錯誤並回滾父表中的行更新操作。5) 級聯刪除相關的欄位
無論何時刪除主表的被引用行,都指示 DBMS 自動刪除外來鍵表的行。ON DELETE {CASCADE | NO ACTION}
如果指定 CASCADE,則從父表中刪除被引用行時,也將從引用表中刪除引用行;
如果指定 NO ACTION,SQL Server 將產生一個錯誤並回滾父表中的行刪除操作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-791264/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sqlserver外來鍵SQLServer
- indexedDB 內鍵與外來鍵Index
- MYSQL的外來鍵MySql
- mysql中的外來鍵MySql
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- SQL的主鍵和外來鍵約束SQL
- Oracle根據主鍵查詢外來鍵Oracle
- mysql建立外來鍵語句MySql
- django外來鍵如何賦值Django賦值
- Oracle 外來鍵查詢sqlOracleSQL
- 10.30 索引,外來鍵索引
- 【實驗】【外來鍵】小議外來鍵約束對應用程式的影響
- QTP關鍵技術QT
- 新的主鍵和外來鍵的語法
- 修改外來鍵為validate時需要驗證資料是否符合外來鍵約束
- 實現 MongoDB 外來鍵關聯MongoDB
- 如何批量使外來鍵(FK)失效
- 資料庫外來鍵,用是不用?資料庫
- 來聽聽達摩院技術專家是怎麼講智慧外呼機器人技術機器人
- 剖析外掛技術 (轉)
- 教你mysql如何增加外來鍵約束MySql
- Django(15)外來鍵和表關係Django
- 資料庫:外來鍵是什麼資料庫
- 外來鍵缺索引檢查指令碼索引指令碼
- oracle外來鍵約束的總結Oracle
- mysql 使用foreign key(外來鍵)MySql
- 查詢沒有索引的外來鍵索引
- MySQL禁用恢復外來鍵約束MySql
- 查詢一個表的外來鍵
- Oracle 外來鍵的級聯處理Oracle
- openGauss-外來鍵鎖增強
- Javaweb-約束-外來鍵約束JavaWeb
- 菜鳥學資料庫(四)——超鍵、候選鍵、主鍵、外來鍵資料庫
- 通過外來鍵連線多個表
- 關於 oracle 外來鍵引用 與 goldengateOracleGo
- Oracle定義約束 外來鍵約束Oracle
- 表外來鍵未加索引之處理索引
- mysql 刪除老是報外來鍵約束MySql