SQL Server 自学之路6 数据表中的主键、外键

看教程和视频都是直接教如何创建主键 或者怎么创建外键和索引,但是都没有教为什么有这个东西.

主键

(1) 主键应当是对用户没有意义的,当用户看到了一个表示多对多关系的连接表中的数据,并抱怨它没有什么用处,那么证明表的主键设计很好;
(2) 永远不要更新主键,因此主键除了唯一的标识一行之外,没有其他用处,如果需要更新,那么主键对于用户无意义的原则被违反了
注:这项原则在对于哪些经常需要在数据转换或者多数据合并时进行数据整理的数据并不适用
(3) 主键不应该包含动态变化的数据,如时间戳、时间列等
(4) 主键应当由计算机自动生成
(5) 一个表中只能有一个主键,如果在其他字段上建立主键,则原来的主键就会取
(6) 主键不能为空

外键

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

索引

(1) 该字段没有重复值,但可以有一个空值
(2) 提高查询排序的速度
(3) 一个表可以有多个唯一索引

举个栗子

人生是数据库的话,我们出生的时候就会有一张身份证(第一张数据表),上面有姓名,年龄 住址 民族 和身份证号,身份证号就是我们身份证这个数据表的主键,为什么是主键呢,第一他对我们来说是无意义的,并且不能为空值不能更改更不是我们自己选择的 而且跟出身的时间年月有关.等我们上学的时候,我们会得到每个人的成绩表(第二张数据表),上面会有学号,姓名,班级,年龄和各科的成绩,作为第二张数据表我们可以已学号作为我们的主键,而第一张表和第二张表中都会有姓名 所以姓名就是外键,连接两个表之前的关系,等我们出了工作之后就会得到工作证(第三张数据表),上面会有工号 部门 职位 姓名等,工号自然就是主键 而名字就是外键,由此可以看出 一张表虽然只有一个主键但是可以有多个外键和主键表相连,而主键表也可以在需要的时候成为外键表,最后索引作为查找的方法像一本书的目录 索引越多越能精确地定位数据表里面的数据,就像看书根据目录直接翻到想看内容的页面就可以了

创建数据表增删主键:界面操作

选择数据表右键单击设计->打开数据表右键某一行数据单击删除主键或设置主键->即可完成(当新的主键被设置,原有的主键则会删除)
在这里插入图片描述

创建数据表增加主键:脚本操作

在这里插入图片描述

 --打开数据库
USE 脚本操作数据库1                                                
GO
 --表名为界面数据表学生成绩
CREATE TABLE 界面数据表学生成绩                                          
(
	--学生学号
	ID int NOT NULL PRIMARY KEY, 
	--学生姓名
	Name varchar(15) NOT NULL,
	--年龄
	Age int NULL,

)

增加外键:界面操作

选择要设置外键的数据表的列和外键表的列数据类型是都一致,右键选择要设置的列,单击关系->打开外键关系,单击添加,然后单击表和列规范后面的…->打开表和列,选择的数据表默认作为外键表,选择主键的列和外键的列,单击确认->关闭外键关系,创建成功(主键表的列可以不是主键,但是外键表的列一定要是主键)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

增加外键:脚本操作

在这里插入图片描述

--外键表的数据表
alter table 脚本数据表身份证
--设置外键
add constraint FK_脚本数据表 foreign key (ID) references 脚本数据表学生成绩 (ID)
--alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称 (列名)

删除外键:界面操作

找到想要删除的外键右键单击删除->打开删除对象页面,单击确认->删除成功
在这里插入图片描述

在这里插入图片描述

删除外键:脚本操作

在这里插入图片描述

--外键表的数据表
alter table 脚本数据表身份证
--删除外键
drop constraint FK_脚本数据表
--alter table 表名 drop constraint 外键约束名

索引主要针对是大数据量的减少查询时间 暂时还不会用所以就不写了 以后再加

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值