天天看點

SQL的主鍵和外鍵的設定文法 SQL的主鍵和外鍵的作用

SQL的主鍵和外鍵的作用

SQL的主鍵和外鍵限制

SQL的主鍵和外鍵的作用:

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

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

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

(3)删除主鍵表記錄時,你可以在建外鍵時標明外鍵記錄一起級聯删除還是拒絕删除。

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

簡而言之,SQL的主鍵和外鍵就是起限制作用。 

關系型資料庫中的一條記錄中有若幹個屬性,若其中某一個屬性組(注意是組)能唯一辨別一條記錄,該屬性組就可以成為一個主鍵。

比如:

學生表(學号,姓名,性别,班級)

    其中每個學生的學号是唯一的,學号就是一個主鍵;

課程表(課程編号,課程名,學分)

    其中課程編号是唯一的,課程編号就是一個主鍵;

成績表(學号,課程号,成績)

    成績表中單一一個屬性無法唯一辨別一條記錄,學号和課程号的組合才可以唯一辨別一條記錄,是以,學号和課程号的屬性組是一個主鍵。

成績表中的學号不是成績表的主鍵,但它和學生表中的學号相對應,并且學生表中的學号是學生表的主鍵,則稱成績表中的學号是學生表的外鍵;同理,成績表中的課程号是課程表的外鍵。

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

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

外鍵用于與另一張表的關聯。是能确定另一張表記錄的字段,用于保持資料的一緻性。比如,A表中的一個字段,是B表的主鍵,那他就可以是A表的外鍵。

二、主鍵、外鍵和索引的差別

定義:

 主鍵--唯一辨別一條記錄,不能有重複的,不允許為空

 外鍵--表的外鍵是另一表的主鍵, 外鍵可以有重複的, 可以是空值

 索引--該字段沒有重複值,但可以有一個空值

作用:

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

 外鍵--用來和其他表建立聯系用的

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

個數:

 主鍵--主鍵隻能有一個

 外鍵--一個表可以有多個外鍵

 索引--一個表可以有多個唯一索引

建立SQL的主鍵和外鍵限制的方法:

create table Student --建表格式:create table 自定義的表名

( --字段名一般為有一定意義的英文

StudentName nvarchar(15), -- 格式:字段名類型()括号裡面的是允許輸入的長度

StudentAge int, --int型的後面不需要接長度

StudentSex nvarchar(2) --最後一個字段後面不要逗号

)

--在建立表時就可以對字段加上限制:

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 (字段名) --字段名同上

--唯一限制:

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'

MySQL:

mysql建表語句是最基礎的SQL語句之一,下面就為您介紹最常用的三種MySQL建表語句,如果您對MySQL建表語句方面感興趣的話,不妨一看。

1、最簡單的:

CREATE TABLE t1(

    id int not null,

    name char(20)

);

2、帶主鍵的:

a:

CREATE TABLE t1(

    id int not null primary key,

    name char(20)

);

b:複合主鍵

CREATE TABLE t1(

    id int not null,

    name char(20),

    primary key (id,name)

);

3、帶預設值的:

CREATE TABLE t1(

    id int not null default 0 primary key,

    name char(20) default '1'

);

繼續閱讀