浅谈SQL之主键、外键约束
约束:顾名思义就是一种限制,在表或列的层次设置约束,确保数据的有效性和完整性。
SQL server中约束的主要分类:
|
UNIQUE约束(唯一性约束) |
防止一个特定的列中两个记录具有相同的值。可设置多个 |
|
CHECK约束(核查约束) |
通过检查一个或多个字段的输入值是否符合设定的检查条件来强制数据的完整性。 |
|
Not Null约束 |
确保列必须具有一个值,否则记录不能插入 |
|
PRIMARY KEY约束(主键约束) |
只能有一个主键约束,是UNIQUE约束和NOT NULL约束的组合 |
|
FOREIGN KEY约束(外键约束) |
外键约束定义了表之间的关系 |
在所有的约束当中,PRIMARY KEY约束是最常用、最重要的。要理解应用主外键约束,还是要把主外键含义搞懂才行。
主键:是一个或多个字段,能唯一标识数据库表中的每个记录。
外键:包含另一个表中的主键值,能确定另一个表记录的字段,用于保持数据的一致性。
比如:
学籍表(学号,姓名,性别,班级,电话)
其中每个学生的学号是唯一的,学号就是一个主键;
课程表(课程编号,课程名,地点)
课程编号是唯一的,它就是一个主键;
有时只靠一个字段不足以唯一标识一条记录,例如:
成绩表(学号,课程编号,成绩,姓名)
成绩表中的任何一个字段都无法唯一标识一条记录,学号和课程编号的组合才可以唯一标识一条记录,所以学号和课程编号的组合才是一个主键。
成绩表中的学号不是成绩表的主键,但是它和学籍表中的学号相对应,且学籍表中的学号是学籍表的主键,这时则称成绩表中的学号是学籍表的外键;同理成绩表中的课程编号是课程表的外键。
理解了主外键后,运用起来才会得心应手。
浅谈SQL之主键、外键约束的更多相关文章
- 第15课-数据库开发及ado.net-数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库
第15课-数据库开发及ado.net 数据库介绍,主键,外键,启动数据库,数据库身份验证方式,建表,分离数据库 1. 学习方法 2. 多涨见识 3. 比自己强的人一起,学习更强:比自己更聪明的人 ...
- Django笔记&教程 4-3 模型(models)主键外键
Django 自学笔记兼学习教程第4章第3节--模型(models)主键外键 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref/models ...
- MS SQL巡检系列——检查外键字段是否缺少索引
前言感想:一时兴起,突然想写一个关于MS SQL的巡检系列方面的文章,因为我觉得这方面的知识分享是有价值,也是非常有意义的.一方面,很多经验不足的人,对于巡检有点茫然,不知道要从哪些方面巡检,另外一方 ...
- EF中主表和附表一起提交的话,如果主附表的主键外键已经设定。
EF中主表和附表一起提交的话,如果主附表的主键外键已经设定,如果新增同时新增主表和附表的记录,那么在EF同时提交时,不需要人为的设定附表的主表的主键值,EF会自动为附表添加外键值.
- 关系型数据库——主键&外键的
一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学 ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈SQL注入风险 - 一个Login拿下Server(转)
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈SQL优化入门:3、利用索引
0.写在前面的话 关于索引的内容本来是想写的,大概收集了下资料,发现并没有想象中的简单,又不想总结了,纠结了一下,决定就大概写点浅显的,好吧,就是懒,先挖个浅坑,以后再挖深一点.最基本的使用很简单,直 ...
随机推荐
- 删除workspace下的vss的scc文件
public class DeleteAA { public static void main(String[] args) { DeleteAA aa=new DeleteAA(); aa.dele ...
- CSS之float属性解读
在web标准的网页中,页面各个元素都是以标准流的方式来进行布局的.即块元素占满指定的宽度,不指定宽度则占满整行(如<p>.<div>元素),内联元素则是在行内一个接一个的从左到 ...
- Asp.NET调用百度翻译
Asp.NET调用百度翻译,图示: HTML: <%@ Page Language="C#" AutoEventWireup="true" CodeFil ...
- android launcher开发之图标背景以及默认配置
1:然后我自己看了一下桌面图标的载入过程: 桌面第一次载入时是默认读取一个xml配置文件,完毕配置工作.这个配置文件在Launcher文件夹下, 路径是:\Launcher\res\xml\defau ...
- 3篇OAuth的文章
http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html http://blog.unvs.cn/archives/oauth-qq1.0-devel ...
- D7升级时候发现许多System函数和网络函数只有Byte版本的,需要注意
SetLength 对于字符串,是WideChar的长度GetMem 只针对ByteMove 只针对ByteFillChar 只针对ByteWriteFile(API) 只针对Byte SetSock ...
- CF 17B Hierarchy
Nick's company employed n people. Now Nick needs to build a tree hierarchy of «supervisor-surbodinat ...
- jQuery EasyUI API 中文文档 - 菜单按钮(menubutton)
<html> <head> <script src="jquery-easyui/jquery.min.js"></script> ...
- Codeforces Round #235 (Div. 2) D. Roman and Numbers (数位dp、状态压缩)
D. Roman and Numbers time limit per test 4 seconds memory limit per test 512 megabytes input standar ...
- 解决Andriod使用HttpURLConnection 失败问题
在Android的Activity中使用HttpURLConnection连接到服务端时抛出异常,Access denied.第一个想到是权限问题.然后就尝试将INTERNET权限加上:在Manife ...