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) on
update
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'
SQL 主鍵和外來鍵約束
sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,s...
SQL的主鍵和外來鍵約束
sql 的主鍵和外來鍵的作用 外來鍵取值規則 空值或參照的主鍵值。1 插入非空值時,如果主鍵表中沒有這個值,則不能插入。2 更新時,不能改為主鍵表中沒有的值。3 刪除主鍵表記錄時,你可以在建外鍵時選定外來鍵記錄一起級聯刪除還是拒絕刪除。4 更新主鍵記錄時,同樣有級聯更新和拒絕執行的選擇。簡而言之,s...
mysql的主鍵 外來鍵約束 MySQL 主鍵外來鍵
笛卡兒積 多表查詢 多個表變成乙個表 完整性約束條件 primary key 標識該屬性為該錶的主鍵,可以唯一的標識對應的元組 foreign key 標識該屬性為該錶的外來鍵,是與之聯絡的某錶的主鍵 not null 標識該屬性不能為空 unique 標識該屬性的值是唯一的 auto increm...