SQL 主鍵和外來鍵約束

2021-07-02 03:51:33 字數 4728 閱讀 9905

sql

的主鍵和外來鍵的作用:

外來鍵取值規則:空值或參照的主鍵值。 (

1)插入非空值時,如果主鍵表中沒有這個值,則不能插入。 (

2)更新時,不能改為主鍵表中沒有的值。 (

3)刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。 (

4)更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。

簡而言之,

sql的主鍵和外來鍵就是起約束作用。

定義主鍵和外來鍵主要是為了維護關聯式資料庫的完整性,總結一下:

一、主鍵是能確定一條記錄的唯一標識,比如,一條記錄包括身份正號,姓名,年齡。身份證號是唯一能確定你這個人的,其他都可能有重複,所以,身份證號是主鍵。

外來鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持資料的一致性。比如,

a表中的乙個字段,是

b表的主鍵,那他就可以是

a表的外來鍵。

二、主鍵、外來鍵和索引的區別

定義:

主鍵--

唯一標識一條記錄,不能有重複的,不允許為空 外來鍵

--表的外來鍵是另一表的主鍵

, 外來鍵可以有重複的

, 可以是空值 索引

--該欄位沒有重複值,但可以有乙個空值

作用: 主鍵

--用來保證資料完整性 外來鍵

--用來和其他表建立聯絡用的 索引

--是提高查詢排序的速度

個數: 主鍵

--主鍵只能有乙個 外來鍵

--乙個表可以有多個外來鍵 索引

--乙個表可以有多個唯一索引 建立

sql的主鍵和外來鍵約束的方法:

create

table student --

建**式

:create table

自定義的表名 (

--欄位名一般為有一定意義的英文

studentname nvarchar

(15),

-- 格式:欄位名型別

()括號裡面的是允許輸入的長度

studentage int

,--int

型的後面不需要接長度

student*** nvarchar

(2)--

最後乙個字段後面不要逗號 )

--在建立表時就可以對欄位加上約束:

create

table student (

studentno int

primary

keyidentity

(1,1),

--加主鍵約束

,還有標識列屬性(兩者構成實體完整性)

studentname nvarchar

(15)

notnull,

--加非空約束,不加

"not null"

預設為:可以為空

studentschool text

(20)

foreign

keyreferences schooltable(schoolname),

--加外來鍵約束,格式

:foreign key references

關聯的表名

(欄位名)

studentage int

default

((0)),

--加預設值約束

student*** nvarchar

(2)check

(student***=n'男'

or student***=n'女'

)--加檢查約束,格式

:check (

條件表示式)

) --如果在表建立好了以後再加約束,則格式分別為:

-- 主鍵:

alter

table表名

addconstraint pk_

欄位名--"pk"

為主鍵的縮寫,欄位名為要在其上建立主鍵的欄位名

,'pk_

欄位名'

就為約束名

primary

key(

欄位名)

--欄位名同上 --

唯一約束:

alter

table表名

addconstraint uq_

欄位名

unique

(欄位名)

--外來鍵約束:

alter

table表名

addconstraint fk_

欄位名--"fk"

為外來鍵的縮寫

foreign

key(

欄位名)

references

關聯的表名

(關聯的欄位名)--

注意'關聯的表名'和

'關聯的欄位名'

alter

table

表a add

constraint fk_b foreign

key(ticket_no)

references

表b(ticket_no)

alter

table

表a add

constraint fk_c foreign

key(person_no)

references

表c(person_no)

alter

table

成績表add

constraint fk_studentno foreign key (studentno) references student (studentno)

onupdate

cascade

ondelete

cascade

級聯更新,級聯刪除,這樣在刪除主表

student

時,成績表中該學生的所有成績都會刪除。 --

檢查約束:

alter

table表名

addconstraint ck_

欄位名

check

(條件表示式)--

條件表示式中的條件用關係運算子連線 --

預設值約束:

alter

table表名

addconstraint df_

欄位名

default

'預設值

'for

欄位名--

其中的'

預設值'

為你想要預設的值,注意

'for' --

刪除建立的約束:

alter

table表名

drop

constraint

約束名--

約束名為你前面建立的如:

pk_欄位這樣的約束名 --

注意:如果約束是在建立表的時候建立的,則不能用命令刪除 --

只能在'

企業管理器

'裡面刪除

-- 獲取sqlserver

中表結構

select

syscolumns.

name

,systypes.

name

,syscolumns.isnullable,

syscolumns.length

from

syscolumns,systypes

where

syscolumns.xusertype = systypes.xusertype

andsyscolumns.id =

object_id

('student'

)--

單獨查詢表遞增字段

select

[name] from syscolumns where

id =

object_id

(n'student'

)and

columnproperty

(id,

name

,'isidentity'

)=1

-- 獲取錶主外來鍵約束

exec

sp_helpconstraint

'sturesults'

-- 查詢表主鍵外來鍵資訊

select

sysobjects.id objectid,

object_name

(sysobjects.parent_obj) tablename,

sysobjects.

name constraintname, sysobjects.xtype as constrainttype,

syscolumns.

name

as columnname

from

sysobjects inner

join sysconstraints on

sysobjects.xtype in(

'c',

'f',

'pk'

,'uq'

,'d'

)and

sysobjects.id = sysconstraints.constid

left

outer

join syscolumns on sysconstraints.id = syscolumns.id

where

object_name

(sysobjects.parent_obj)=

'sturesults'

**宣告:  chenlaoyang部落格   

SQL的主鍵和外來鍵約束

sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,s...

SQL的主鍵和外來鍵等各種約束

sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,s...

mysql約束,主鍵,外來鍵

資料庫表約束 對錶中的資料進行限制,保證資料的正確性 有效性和完整性,乙個表如果新增了約束,不正確的資料將無法插入到表中。約束在建立表的時候新增比較合適。約束名約束關鍵字 主鍵primary key 唯一unique 非空not null 外來鍵foreign key 檢查約束 check 注 my...