SQL?Server主鍵與外鍵設置以及相關理解
一、定義與作用
主鍵:表中能夠唯一地辨別事物的屬性。通過主鍵能夠查詢出表中一條完整的記錄,同時使用主鍵能防止表中出現(xiàn)重復的記錄,避免了數(shù)據(jù)的冗余。
外鍵:通俗講就是表中一個屬性是來自另一張表的主鍵,該屬性被稱為該表的外鍵,外鍵可以有不止一個。外鍵存在的意義就是將事物與事物之間聯(lián)系起來。
二、SSMS設置表的主鍵與外鍵
1、利用SQL語句建立查詢設置
舉了一個學生、課程以及學生成績關系表的例子:
--代碼 create table [表名] ( 屬性名 類型 primary key, 屬性名 類型 foreign key references [外鍵來自的表](外鍵的屬性名), 屬性名 類型 not null, 屬性名 類型 null, ··· ···); --實例 create table Student( --創(chuàng)建Student表 Stu_id varchar(10) primary key, --學號Stu_id設置為主鍵 Stu_name nvarchar(10) not null, --學生姓名 Stu_sex nvarchar(2) default '男'); --學生性別,設置默認值為'男' create table Course( --創(chuàng)建課程信息表Course Course_id varchar(4) primary key, --課程編號Course_id設置為主鍵 Course_name varchar(10) not null); --課程姓名 create table StudentGrade( --創(chuàng)建成績表 stu_id varchar(10) foreign key references Student(Stu_id), --學生學號設置為外鍵 Course_id varchar(4) foreign key references Course(Course_id), --課程號設置為外鍵 Grade int null); --學生成績
2、利用鼠標點擊操作創(chuàng)建(SSMS環(huán)境下)
1) 設置主鍵
a.在已創(chuàng)建Student表的前提下,點擊Student表,右擊,選擇<設計>
b.選擇屬性Stu_id,右擊,選擇設置主鍵
設置完成,Course表主鍵設置同上。
2)設置外鍵
a.選擇StudentGrade表,如1)中a所示選擇<設計>
b.選擇屬性Stu_id,右擊,選擇<關系>
c.在彈出的窗口選擇<添加>
d.點擊表和列規(guī)范最右邊的三個小點(白色背景可能看不到,但點最右邊也差不多了)
e.關系名可以重新編輯,最好是能讓自己記得住或看得懂含義的名字。將主鍵表和外鍵表設置完后點擊右下方確認即可。
三、主鍵表與外鍵表(個人的總結與反思...)
剛開始上課的時候我就有點搞不清主鍵表與外鍵表,特別是設置的這張圖里,
(假設正在設置的這張StudentGrade表稱為本表,其他表相對地稱為外表),我認為外鍵表應該是指外鍵本來所在的表,即外表,因此應該設置為Student才對,但是這個框框一直編輯不了;而主鍵表應該指我正在編輯的這張StudentGrade表才對,但是當選擇StudentGrade之后,下面列選項的框框就變成空的,沒有列可選。
但是將兩個操作互換后又能得到想要的結果,所以當時就半懵半混過去了。
然后偶然聽到郝斌老師的課之后才恍然大悟。
首先,主鍵表應該是指外鍵所來自的那個表,即例子中的Student表,在Student表中Stu_id是該表的主鍵,因此該表稱為主鍵表;而外鍵表則指Stu_id扮演外鍵的時候所在的表,即例子中StudentGrade表。
補充:SQL Server的主鍵與外鍵約束
SQL Server的主鍵與外鍵約束SQL Server有許多的重要知識,開始也說過許多的SQL知識了。SQL Server中的約束也是一個重要性的知識,下面我來說說關于SQL Server約束的知識。
首先我們來說說SQL sever的主鍵約束:主鍵是唯一標識表中每一行的列或一組列??梢允褂?PRIMARY KEY 約束為表創(chuàng)建主鍵。如果主鍵只包含一列,則可以將 PRIMARY KEY 約束定義為列約束,如果主鍵有兩列或更多列,則必須使用 PRIMARY KEY約束作為表約束(代碼如圖所示):
每個表只能有一個主鍵。參與主鍵的所有列必須定義為 NOT NULL。如果沒有為這些列指定 NOT NULL 約束,SQL Server會自動為所有主鍵列設置 NOT NULL 約束。在創(chuàng)建主鍵時,SQL Server還會自動創(chuàng)建唯一的聚簇索引(如果指定,則為非聚集索引)。
接下來就是外鍵約束:SQL Server外鍵約束簡介外鍵是一個表中的一列或一組列,它唯一地標識另一個表的行。 vendor_groups 和vendor表,它們的結構(如圖所示):
每個供應商屬于供應商組,每個供應商組可能有零個或多個供應商。 vendor_groups 和 vendors 表之間的關系是一對多的。對于 vendors 表中的每一行,始終可以在 vendor_groups 表中找到相應的行。但是,如果使用當前表創(chuàng)建方式,可以在vendors 表中插入一行而不在 vendor_groups 表中顯示相應 的行。 還可以刪除 vendor_groups 表中的行,而無需更新或刪除 vendors 表中導致 vendors 表中存在孤立的行。要強制執(zhí)行 vendor_groups 和 vendors 表中的數(shù)據(jù)之間的鏈接,需要在 vendors 表中建立外鍵。要創(chuàng)建外鍵,請使用 FOREIGN KEY 約束。以下語句刪除 vendors 表并使用 FOREIGN KEY 約束重新創(chuàng)建它:
現(xiàn)在,vendor_groups 表稱為父表,該表是外鍵約束引用的表。 vendors 表稱為子表,該表是應用外鍵約束的表。
總結
到此這篇關于SQL Server主鍵與外鍵設置以及相關理解的文章就介紹到這了,更多相關SQL Server主鍵與外鍵設置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用sp_xml_preparedocument處理XML文檔的方法
有時會在存儲過程中處理一些XML格式的數(shù)據(jù),所以會用到sp_xml_preparedocument,他可以將XML數(shù)據(jù)進行讀取,然后使用 MSXML 分析器 (Msxmlsql.dll) 對其進行分析。2011-08-08SQL SERVER偏移函數(shù)(LAG、LEAD、FIRST_VALUE、LAST _VALUE、NT
本文主要介紹了SQL SERVER偏移函數(shù)(LAG、LEAD、FIRST_VALUE、LAST _VALUE、NTH_VALUE),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05利用ROW_NUMBER() OVER函數(shù)給SQL數(shù)據(jù)庫中每一條記錄分配行號的方法
這篇文章主要介紹了利用ROW_NUMBER() OVER函數(shù)給SQL數(shù)據(jù)庫中每一條記錄分配行號的方法,需要的朋友可以參考下2015-10-10Sql?Server?"用戶登錄失敗,錯誤編18456"的解決過程
在我們使用數(shù)據(jù)庫的時候,偶爾會遇到一些登錄上的錯誤提示,下面這篇文章主要給大家介紹了關于Sql?Server?"用戶登錄失敗,錯誤編18456"的解決過程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2022-09-09INSERT INTO SELECT語句與SELECT INTO FROM語句的一些區(qū)別
INSERT INTO SELECT語句與SELECT INTO FROM語句的一些區(qū)別介紹,需要的朋友可以參考下面的說明與條件2012-05-05SQL Server 海量數(shù)據(jù)導入的最快方法
這篇論壇文章(賽迪網(wǎng)技術社區(qū))詳細講解了SQL Server海量數(shù)據(jù)導入的最快方法,更多內(nèi)容請參考下文2008-12-12