首页 > 编程知识 正文

sql外键有什么用,mysql创建外键的sql语句

时间:2023-05-04 15:48:53 阅读:44719 作者:2625

一、主键、外键是指:

关系数据库中的记录有几个属性。 如果属性组之一(即组)可以唯一标识记录,则属性组将成为主键

例如

学生表(学校编号、姓名、性别、班级) ) )。

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

课程体系(课程编号、课程名称、学分) )。

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

成绩单(学校编号、课程编号、成绩) ) ) )。

成绩单中的一个属性不能唯一识别一个记录,学校号和课程号的组合可以唯一识别一个记录,所以学校号和课程号的属性组是一个主键

成绩单中的学校编号不是成绩单的主键,但与学生表中的学校编号相对应。 另外,如果学生表中的学校编号是学生表的主键,则成绩单中的学校编号称为学生表的外键

同一成绩单的课程编号是课程体系的外键

主键和外键主要是为了维护关系数据库的完整性而定义的,可归纳为:

1 .主键是唯一可以确定一个记录的标志,例如,一个记录包括身份的正号、姓名、年龄。

身份证号码是唯一能确定你这个人的,可能还有其他重复,所以身份证号码是主键。

2 .外键用于与另一个表关联。 为了保持数据完整性,可以确定其他表记录的字段。

例如,如果a表中的字段是b表的主键,则他是a表的外键。

二.主键、外键、索引的区别

主键、外键和索引之间的差异?

主键

外键

索引

定义:

唯一识别一个记录,不能有重复,不能留空

表的外键可以是另一表的主键,外键可以重复或为空

此字段没有重复的值,但可以为空值

角色:

用于保证数据完整性

为了和其他表取得联系的

就是加快查询的排序

个数:

只有一个主键

一个表可以指定多个外键

一个表可以有多个唯一的索引

聚合索引和非聚合索引有什么区别?

聚合索引必须是唯一索引。 但是,唯一索引不一定是聚合索引。

聚合索引。 将数据直接存储在索引页而不是聚合索引中。 存储在索引页上的是索引,这些索引指向特定数据页上的数据。

三.数据库中主键和外键的设计原则

主键和外键是将多个表组织到有效关系数据库中的粘合剂。 主键和外键的设计对物理数据库的性能和可用性具有决定性影响。

必须将数据库架构从理论逻辑设计转换为实际物理设计。 主键和外键的结构是该设计过程的根本原因。 在生产环境中使用所设计的数据库时,很难更改密钥,因此在开发阶段预先设计密钥和外键是非常必要和有价值的。

主键:

关系数据库依赖于主键。 它是数据库物理模型的基础。

主键在物理上只有两种用途。

1.1唯一识别行。

2 .作为可以通过外键有效引用的对象。

根据这两种用途,我们将介绍设计物理主键时遵循的一些原则。

1 .主键必须对用户没有意义。 如果用户看到表示多对多关系的连接表中的数据,并抱怨没有任何帮助,则表明主键设计得很好。

2 .主键必须是一列,以简化连接和筛选操作。

注:使用复合键的人通常有两个原因。 这两个理由都是错误的。 一种情况是主键应该具有实际意义,但使主键具有意义只是便于人为破坏数据库。 第二,可以用这种方法在描述多对多关系的连接表中使用两个外键作为主键。 我也反对这个。 因为复合主键经常导致不好的外键。 这是因为,如果连接表成为另一个从表的主表,并通过上述第二种方法成为该表主键的一部分,则该表也可能成为另一个从表的主表。

3 .请不要更新主键。 实际上,主键除了唯一标识一行外没有其他用途,因此也没有理由更新它。 如果需要更新主键,这违反了主键对用户无意义的原则。

注:此原则不适用于在数据转换或多个数据库集成期间需要组织数据的数据。

4 .主键中不要包含动态变化的数据,如时间戳、创建时间列和修改时间列。

5 .主键必须由计算机自动生成。 一旦有人介入主键的创建,它就具有唯一识别行以外的意义。 越过这个边界,就有可能产生修正主键的动机。 这样,这些系统链接记录行和管理记录行的重要手段就会落入不了解数据库设计的人手中。

四.数据库主键选择策略

创建数据库时,必须为每个表指定主键。 主键是指可以唯一识别表中的内容

某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。当然,其它字段可以辅助我们在执行这些操作时消除共享冲突,不过就不在这里讨论了。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。所以数据库在设计时,主键起到了很重要的作用。

常见的数据库主键选取方式有:

· 自动增长字段

· 手动增长字段

· UniqueIdentifier

· “COMB(Combine)”类型

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。