SQL 的主键和外键的作用:

外键取值规则:空值或参照的主键值
(1)插入非空值时,如果主键值中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,可以在建外键时选定外键记录一起联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。

简而言之,SQL的主键和外键就是起约束作用。
关系型数据库中一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性就可以成为一个主键。例如:

学生表(学号,姓名,性别,班级)

其中每个学生的学号是唯一的,学号就是一个主键;

课程表(课程编号,课程名,学分)

其中课程编号是唯一的,课程编号就是一个主键;

成绩表(学号,课程号,成绩)

成绩表中单一一个属性无法唯一标识一条记录,学号和课程编号的组合才可以唯一标识一条记录,所以学号和课程编号的属性组是一个主键。
成绩表中的学号不是成绩表中的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。

定义主键和外键主要是为了维护关系数据库的完整性,总结一下:

1.主键是能确定一条记录的唯一标识。比如,一条记录包括身份证号码,姓名,年龄。身份证号码是唯一确认你这个人的,其他的都可能有重复,所以身份证号码是主键。
外键用于与另一张表相关联。是能确认另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那它就可以是A表的外键。

2.主键、外键和索引的区别

定义:
主键:唯一标识一条记录,不能有重复,不允许为空。
外键:表的外键是另一表的主键,外键是可以有重复的,可以是空值。
索引:该字段没有重复值,但可以有一个空值。
作用:
主键:用来保证数据完整性
外键:用来和其他表建立联系用
索引:用来提高查询排序的速度
个数:
主键:主键只能有一个。
外键:一个表可以有多个外键。
索引:一个表可以有多个唯一索引。

创建SQL的主键和外键约束的方法:

--如果在表创建好了以后再加约束,则格式分别为--主键
ALTER TABLE 表名
--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,"PK_字段名"就为约束名
ADD CONSTRAINT PK_字段名
--同上
PRIMARY KEY(字段名)--唯一约束
ALTER TABLE 表名
ADD CONSTRAINT UQ_字段名
UNIQUE(字段名)--外键约束
ALTER TABLE 表名
--"FK"为外键的缩写
ADD CONSTRAINT FK_字段名
FOREIGN KEY(字段名) REFERENCES 关联的表名(关联的字段名)--举个例子
ALTER TABLE 表A
ADD CONSTRAINT FK_B
FOREIGN KEY(TicketNo) REFERENCES 表B(TicketNo)--级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除
ALTER TABLE 成绩表
ADD CONSTRAINT FK_StudentNo
FOREIGN KEY(StudentNo) REFERENCES Student(StudentNo)
ON UPDATE CASCADE ON DELETE CASCADE--检查约束
ALTER TABLE 表名
ADD CONSTRAINT CK_字段名
--括号中的"CK_字段名>0"为条件表达式,用关系运算符连接
CHECK(字段名>0)--默认值约束
ALTER TABLE 表名
ADD CONSTRAINT DF_字段名
--其中的'默认值'为想要设置的默认值,注意'FOR'
DEFAULT '默认值' FOR 字段名--删除创建的约束
ALTER TABLE 表名
--约束名为前面创建的如:FK_字段名这样的约束名
DROP CONSTRAINT 约束名
--注意:如果约束是在创建表的时候创建的,则不能用命令删除
--只能在'企业管理器'里面删除--获取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 'Student'--查询表主键外键信息
SELECT
sysobjects.id AS objectId,
OBJECT_NAME(sysobjects.parent_obj) AS TableName,
sysobjects.name AS 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) = 'Student'

部分效果图如下:

获取SqlServer中的表结构

单独查询表递增字段

获取表主外键约束

查询表主键外键信息

作者:流沙麒麟客
链接:https://www.jianshu.com/p/394f8aa724f4
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

SQL的主键和外键的作用相关推荐

  1. SQL的主键和外键约束

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  2. 数据库原理与应用(SQL Server)教程 主键、外键以及联合主键、复合主键和设置种子数目和增量

    文章目录 前言 一.主键.联合主键和复合主键 (一)主键 (二)联合主键 (三)复合主键 二.外键.设置种子数目和增量 (一)外键的概念 (二)添加外键 (三)设置种子数目和增量 结语 前言 这篇文章 ...

  3. SQL数据库语言基础之SqlServer数据表的六大约束(主键、外键、检查、非空、唯一性、默认值约束)的创建

    文章目录 一.主键约束(primary key) 二.外键约束(foreign key) 三.检查约束(check) 四.非空约束(not null) 五.唯一性约束(unique) 六.默认值约束( ...

  4. 数据库之SQL的主键和外键的作用

    SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主 ...

  5. SQL的主键和外键的设置语法

    SQL的主键和外键的作用 SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表 ...

  6. SQL Server:主键与外键设置与相关理解

    一.定义与作用 主键:表中能够唯一地辨别事物的属性.通过主键能够查询出表中一条完整的记录,同时使用主键能防止表中出现重复的记录,避免了数据的冗余. 外键:通俗讲就是表中一个属性是来自另一张表的主键,该 ...

  7. SQL Server的主键与外键约束

    SQL Server的主键与外键约束SQL Server有许多的重要知识,开始也说过许多的SQL知识了.SQL Server中的约束也是一个重要性的知识,下面我来说说关于SQL Server约束的知识 ...

  8. mysql sql外键的作用_SQL的主键和外键的作用

    QL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外键 ...

  9. MySQL数据库SQL的主键和外键的作用

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

最新文章

  1. Linux(CentOS6.5)中安装maven
  2. mysql安装好需要优化配置一下_Mysql的安装、配置、优化
  3. 正则化如何消除过拟合
  4. haar 人脸检测跟踪源码整理
  5. hadoop-2.7.1+zookeeper-3.4.8+hbase-1.2.1+apache-hive-2.0.0完全分布式集群
  6. 你如何摆平秋季问题皮肤
  7. Apache JMeter 压试 HTTP接口
  8. webpack4.0各个击破(4)—— Javascript splitChunk
  9. JavaScript对象的常用属性及使用
  10. Ubuntu安装与配置
  11. Netfilter学习之NAT类型动态配置(二)NAT类型介绍及MASQUERADE用户层的实现
  12. 微信公众号自动回复消息跳转小程序
  13. 如何做好新媒体软文营销推广
  14. 苹果电脑如何开启文件保险箱功能?
  15. 讯时网站管理系统通杀0DAY漏洞
  16. 计算机Excel设置透视图,电脑Excel表格中数据透视图怎么制作
  17. 如何应对大数据分析工程师面试Spark考察,看这一篇就够了
  18. Mac 卸载自己安装的python
  19. 四川大学计算机学院陈宇老师,吕建成(四川大学计算机学院(软件学院)院长)_百度百科...
  20. python 游戏辅助lol_一个基于python的自动玩游戏辅助

热门文章

  1. Cisco考试再认证常见疑难问题解答
  2. 什么是“五险一金”?
  3. 深度学习经典应用——鸢尾花分类(基于sklearn包)+三维成果可视化
  4. 不同cpu服务器虚拟迁移,案例五:虚拟机迁移报错CPU不兼容
  5. 2021年第40周总结
  6. 双向数据绑定原理(原生js实现双向数据绑定)
  7. PowerShell远程重启IIS和Service
  8. 代理模式(三):远程代理,虚拟代理,缓冲代理
  9. 数据通信--ASCII码通信16进制通信的区别
  10. 旋转验证码分析 rotatecaptcha