暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL Server 自学之路 第六章 数据表中的主键、外键

菜鸡部落 2021-08-02
1010

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

主键

(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 外键约束名

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

        文章转载自菜鸡部落,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论