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‘

时间: 06-06

SQL的主键和外键约束详解及用途的相关文章

SQL语句建表、设置主键、外键、check、default、unique约束

· 什么是数据库? 存放数据的仓库. · 数据库和数据结构有什么区别? 数据结构要解决在内存中操作数据的问题,数据库要解决在硬盘中操作数据的问题.数据结构研究一些抽象数据模型(ADT)和以及定义在该模型上的一些操作,数据库是由表.关系.操作组成. · 什么是主键? 主键用来标识记录的唯一性. · 什么是外键? 外键用来标识表与表之间的联系. · 什么是check约束? check约束限制了输入值的范围. · 什么是default约束? 给某个属性一个默认值. · 什么是unique约束? 限制某

SQL的主键和外键约束

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,

SQL Server 如何添加删除外键、主键,以及更新自增属性

1.添加删除主键和外键 例如: -----删除主键约束DECLARE @NAME SYSNAMEDECLARE @TB_NAME SYSNAMESET @TB_NAME = 'Date'SELECT TOP 1  @NAME=NAME FROM SYS.OBJECTS WITH(NOLOCK)WHERE TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND PARENT_OBJECT_ID = (    SELECT OBJECT_ID    FROM SYS.OBJE

SQL的主键和外键的作用

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,

SQL的主键和外键

SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除. (4)更新主键记录时,同样有级联更新和拒绝执行的选择. 简而言之,SQL的主键和外键就是起约束作用. 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,

PowerDesigner-VBSrcipt-自动设置主键,外键名等(SQL Server)

在PowerDesigner中的设计SQL Server 数据表时,要求通过vbScript脚本实现下面的功能: 主键:pk_TableName 外键:fk_TableName_ForeignKeyColumnList 当字段作为主键,而且类型为smallint,int,bigint,那么要设置Identity =true. 当字段作为主键,而且类型为uniqueidentifier,那么要设置默认值为newid(),而且设置扩展属性rowguidcol. Option Explicit Val

sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)

使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 3 where f.parent_object_id=object_id('表名') 执行如下SQL语句删除即可. 1 alter table 表名 drop constraint 外键约束名 sql数据库删除表的外键约束(INSERT 语句与 F

Chapter 1. 数据库概述、主键、外键

数据库 database: 存储数据的仓库,用表来分类数据 特点:海量存储:查找速度快:并发性问题的控制:安全性:数据完整性(保存在数据库中的数据是正确的真实的) 数据库软件:DBSM   database management system 常见数据库软件:MySQL  MSSQL server  Oracle  Access SQL:Structured Query Language 结构化查询语言   特点:语言简洁.易学易用. SQL Server:是一种基于网络的大型数据库软件.主要用

主键、外键和子查询

1 主键和外键的区别 1.1定义 主键--唯一标识一条记录,不能有重复的,不允许为空 外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空 1.2作用 主键--用来保证数据完整性 外键--用来和其他表建立联系用的 1.3个数: 主键--主键只能有一个 外键--一个表可以有多个外键 2 主键语句code int PRIMARY KEY IDENTITY(1,1), --PRIMARY KEY 标识主键--IDENTITY(1,1) 从一开始,每增加一行加一: 插入数据不用再写. 3 外键

主键与外键

本内容转载自  http://www.cnblogs.com/longyi1234/archive/2010/03/24/1693738.html 一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如:学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个