SQL?Server主鍵與外鍵設(shè)置以及相關(guān)理解
一、定義與作用
主鍵:表中能夠唯一地辨別事物的屬性。通過主鍵能夠查詢出表中一條完整的記錄,同時(shí)使用主鍵能防止表中出現(xiàn)重復(fù)的記錄,避免了數(shù)據(jù)的冗余。
外鍵:通俗講就是表中一個(gè)屬性是來自另一張表的主鍵,該屬性被稱為該表的外鍵,外鍵可以有不止一個(gè)。外鍵存在的意義就是將事物與事物之間聯(lián)系起來。
二、SSMS設(shè)置表的主鍵與外鍵
1、利用SQL語句建立查詢?cè)O(shè)置
舉了一個(gè)學(xué)生、課程以及學(xué)生成績關(guān)系表的例子:
--代碼
create table [表名] (
屬性名 類型 primary key,
屬性名 類型 foreign key references [外鍵來自的表](外鍵的屬性名),
屬性名 類型 not null,
屬性名 類型 null,
··· ···);
--實(shí)例
create table Student( --創(chuàng)建Student表
Stu_id varchar(10) primary key, --學(xué)號(hào)Stu_id設(shè)置為主鍵
Stu_name nvarchar(10) not null, --學(xué)生姓名
Stu_sex nvarchar(2) default '男'); --學(xué)生性別,設(shè)置默認(rèn)值為'男'
create table Course( --創(chuàng)建課程信息表Course
Course_id varchar(4) primary key, --課程編號(hào)Course_id設(shè)置為主鍵
Course_name varchar(10) not null); --課程姓名
create table StudentGrade( --創(chuàng)建成績表
stu_id varchar(10) foreign key references Student(Stu_id), --學(xué)生學(xué)號(hào)設(shè)置為外鍵
Course_id varchar(4) foreign key references Course(Course_id), --課程號(hào)設(shè)置為外鍵
Grade int null); --學(xué)生成績2、利用鼠標(biāo)點(diǎn)擊操作創(chuàng)建(SSMS環(huán)境下)
1) 設(shè)置主鍵
a.在已創(chuàng)建Student表的前提下,點(diǎn)擊Student表,右擊,選擇<設(shè)計(jì)>

b.選擇屬性Stu_id,右擊,選擇設(shè)置主鍵


設(shè)置完成,Course表主鍵設(shè)置同上。
2)設(shè)置外鍵
a.選擇StudentGrade表,如1)中a所示選擇<設(shè)計(jì)>
b.選擇屬性Stu_id,右擊,選擇<關(guān)系>

c.在彈出的窗口選擇<添加>

d.點(diǎn)擊表和列規(guī)范最右邊的三個(gè)小點(diǎn)(白色背景可能看不到,但點(diǎn)最右邊也差不多了)

e.關(guān)系名可以重新編輯,最好是能讓自己記得住或看得懂含義的名字。將主鍵表和外鍵表設(shè)置完后點(diǎn)擊右下方確認(rèn)即可。

三、主鍵表與外鍵表(個(gè)人的總結(jié)與反思...)
剛開始上課的時(shí)候我就有點(diǎn)搞不清主鍵表與外鍵表,特別是設(shè)置的這張圖里,

(假設(shè)正在設(shè)置的這張StudentGrade表稱為本表,其他表相對(duì)地稱為外表),我認(rèn)為外鍵表應(yīng)該是指外鍵本來所在的表,即外表,因此應(yīng)該設(shè)置為Student才對(duì),但是這個(gè)框框一直編輯不了;而主鍵表應(yīng)該指我正在編輯的這張StudentGrade表才對(duì),但是當(dāng)選擇StudentGrade之后,下面列選項(xiàng)的框框就變成空的,沒有列可選。

但是將兩個(gè)操作互換后又能得到想要的結(jié)果,所以當(dāng)時(shí)就半懵半混過去了。
然后偶然聽到郝斌老師的課之后才恍然大悟。
首先,主鍵表應(yīng)該是指外鍵所來自的那個(gè)表,即例子中的Student表,在Student表中Stu_id是該表的主鍵,因此該表稱為主鍵表;而外鍵表則指Stu_id扮演外鍵的時(shí)候所在的表,即例子中StudentGrade表。
補(bǔ)充:SQL Server的主鍵與外鍵約束
SQL Server的主鍵與外鍵約束SQL Server有許多的重要知識(shí),開始也說過許多的SQL知識(shí)了。SQL Server中的約束也是一個(gè)重要性的知識(shí),下面我來說說關(guān)于SQL Server約束的知識(shí)。
首先我們來說說SQL sever的主鍵約束:主鍵是唯一標(biāo)識(shí)表中每一行的列或一組列??梢允褂?PRIMARY KEY 約束為表創(chuàng)建主鍵。如果主鍵只包含一列,則可以將 PRIMARY KEY 約束定義為列約束,如果主鍵有兩列或更多列,則必須使用 PRIMARY KEY約束作為表約束(代碼如圖所示):

每個(gè)表只能有一個(gè)主鍵。參與主鍵的所有列必須定義為 NOT NULL。如果沒有為這些列指定 NOT NULL 約束,SQL Server會(huì)自動(dòng)為所有主鍵列設(shè)置 NOT NULL 約束。在創(chuàng)建主鍵時(shí),SQL Server還會(huì)自動(dòng)創(chuàng)建唯一的聚簇索引(如果指定,則為非聚集索引)。
接下來就是外鍵約束:SQL Server外鍵約束簡介外鍵是一個(gè)表中的一列或一組列,它唯一地標(biāo)識(shí)另一個(gè)表的行。 vendor_groups 和vendor表,它們的結(jié)構(gòu)(如圖所示):

每個(gè)供應(yīng)商屬于供應(yīng)商組,每個(gè)供應(yīng)商組可能有零個(gè)或多個(gè)供應(yīng)商。 vendor_groups 和 vendors 表之間的關(guān)系是一對(duì)多的。對(duì)于 vendors 表中的每一行,始終可以在 vendor_groups 表中找到相應(yīng)的行。但是,如果使用當(dāng)前表創(chuàng)建方式,可以在vendors 表中插入一行而不在 vendor_groups 表中顯示相應(yīng) 的行。 還可以刪除 vendor_groups 表中的行,而無需更新或刪除 vendors 表中導(dǎo)致 vendors 表中存在孤立的行。要強(qiáng)制執(zhí)行 vendor_groups 和 vendors 表中的數(shù)據(jù)之間的鏈接,需要在 vendors 表中建立外鍵。要?jiǎng)?chuàng)建外鍵,請(qǐng)使用 FOREIGN KEY 約束。以下語句刪除 vendors 表并使用 FOREIGN KEY 約束重新創(chuàng)建它:

現(xiàn)在,vendor_groups 表稱為父表,該表是外鍵約束引用的表。 vendors 表稱為子表,該表是應(yīng)用外鍵約束的表。
總結(jié)
到此這篇關(guān)于SQL Server主鍵與外鍵設(shè)置以及相關(guān)理解的文章就介紹到這了,更多相關(guān)SQL Server主鍵與外鍵設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver 不能將值NULL插入列id(列不允許有空值解決)
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e2f' 不能將值 NULL 插入列 'id',表 'web.dbo.dingdan';列不允許有空值。INSERT 失敗2013-06-06
SQL Server 中調(diào)整自增字段的當(dāng)前初始值
SQL Server 中調(diào)整自增字段的當(dāng)前初始值...2007-01-01
SQL Server使用Windows身份驗(yàn)證與JDBC連接數(shù)據(jù)庫的操作流程
在企業(yè)級(jí)應(yīng)用中,數(shù)據(jù)庫的安全性是非常重要的,SQL Server 提供了多種身份驗(yàn)證方式,其中 Windows 身份驗(yàn)證是一種較為安全且方便的管理方式,本文將介紹如何在 Java 中使用 JDBC 連接 SQL Server 數(shù)據(jù)庫,并且通過 Windows 身份驗(yàn)證來確保數(shù)據(jù)訪問的安全性2024-12-12
sqlserver substring函數(shù)使用方法小結(jié)
在操作sqlserver時(shí)候用到了substring函數(shù),特整理一些實(shí)例,需要的朋友可以參考下。2009-12-12
一個(gè)過濾重復(fù)數(shù)據(jù)的 SQL 語句
一個(gè)過濾重復(fù)數(shù)據(jù)的 SQL 語句...2006-12-12
MSSql簡單查詢出數(shù)據(jù)表中所有重復(fù)數(shù)據(jù)的方法
這篇文章主要介紹了MSSql簡單查詢出數(shù)據(jù)表中所有重復(fù)數(shù)據(jù)的方法,涉及mssql復(fù)合查詢的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08
SQL?Server使用xp_readerrorlog命令查看錯(cuò)誤日志
本文探討了SQL?Server中查看日志的四種方法,重點(diǎn)介紹了xp_readerrorlog命令的使用方法,xp_readerrorlog命令用于T-SQL讀取SQL?Server錯(cuò)誤日志,有助于對(duì)SQL?Server中的問題進(jìn)行故障排除,避免因特定情況而從GUI讀取大型錯(cuò)誤日志的麻煩2025-03-03
SQL?Server日志清理3種實(shí)現(xiàn)方式
這篇文章主要給大家介紹了關(guān)于SQL?Server日志清理3種實(shí)現(xiàn)方式的相關(guān)資料,在數(shù)據(jù)庫使用很久后日志文件會(huì)累計(jì)的越來越大,如果硬盤空間不足可能會(huì)導(dǎo)致宕機(jī),需要的朋友可以參考下2023-09-09

