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...