SQL的主鍵和外鍵的作用:
外鍵取值規則:空值或參照的主鍵值。
(1)插入非空值時,如果主鍵表中沒有這個值,則不能插入。
(2)更新時,不能改成主鍵表中沒有的值。
(3)刪除主鍵表記錄時,你可以在建外鍵時選定外鍵記錄1起級聯刪除還是謝絕刪除。
(4)更新主鍵記錄時,一樣有級聯更新和謝絕履行的選擇。
簡而言之,SQL的主鍵和外鍵就是起束縛作用。
定義主鍵和外鍵主要是為了保護關系數據庫的完全性,總結1下:
1、主鍵是能肯定1條記錄的唯1標識,比如,1條記錄包括身份正號,姓名,年齡。身份證號是唯1能肯定你這個人的,其他都可能有重復,所以,身份證號是主鍵。
外鍵用于與另外一張表的關聯。是能肯定另外一張表記錄的字段,用于保持數據的1致性。比如,A表中的1個字段,是B表的主鍵,那他就能夠是A表的外鍵。
2、主鍵、外鍵和索引的區分
定義:
主鍵--唯1標識1條記錄,不能有重復的,不允許為空
外鍵--表的外鍵是另外一表的主鍵, 外鍵可以有重復的, 可以是空值
索引--該字段沒有重復值,但可以有1個空值
作用:
主鍵--用來保證數據完全性
外鍵--用來和其他表建立聯系用的
索引--是提高查詢排序的速度
個數:
主鍵--主鍵只能有1個
外鍵--1個表可以有多個外鍵
索引--1個表可以有多個唯1索引
創建SQL的主鍵和外鍵束縛的方法:
create table Student --建表格式:create table 自定義的表名
( --字段名1般為有1定意義的英文
StudentName nvarchar(15), -- 格式:字段名類型()括號里面的是允許輸入的長度
StudentAge int, --int型的后面不需要接長度
StudentSex nvarchar(2) --最后1個字段后面不要逗號
)
--在創建表時就能夠對字段加上束縛:
create table Student
(
StudentNo int PRIMARY KEY IDENTITY(1,1), --加主鍵束縛,還有標識列屬性(二者構成實體完全性)
StudentName nvarchar(15) not null, --加非空束縛,不加"not null" 默許為:可以為空
StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外鍵束縛,格式:FOREIGN KEY REFERENCES 關聯的表名(字段名)
StudentAge int DEFAULT ((0)), --加默許值束縛
StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女') --加檢查束縛,格式:check (條件表達式)
)
--如果在表創建好了以后再加束縛,則格式分別為:
-- 主鍵:
alter table 表名
add constraint PK_字段名--"PK"為主鍵的縮寫,字段名為要在其上創建主鍵的字段名,'PK_字段名'就為束縛名
primary key (字段名) --字段名同上
--唯1束縛:
alter table 表名
add constraint UQ_字段名
unique (字段名)
--外鍵束縛:
alter table 表名
add constraint 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 ON DELETE CASCADE
級聯更新,級聯刪除,這樣在刪除主表Student時,成績表中該學生的所有成績都會刪除。
--檢查束縛:
alter table 表名
add constraint CK_字段名
check (條件表達式) --條件表達式中的條件用關系運算符連接
--默許值束縛:
alter table 表名
add constraint 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
AND syscolumns.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博客 http://blog.csdn.net/chenlaoyang/article/details/8708980
下一篇 JCaptcha算數式驗證碼