MySQL?数据库的约束及数据表的设计原理

 更新时间:2022年01月24日 16:23:49   作者:吞吞吐吐大魔王  
这篇文章主要介绍了MySQL?数据库的约束及数据表的设计原理,数据库中的约束即是对插入数据库中的数据进行限定,为了保证数据的有效性和完整性,下面一起来了解具体的详细内容,需要的小伙伴可以参考一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1. 数据库的约束

1.1 介绍

数据库中的约束 ,顾名思义即是对插入数据库中的数据进行限定,这么做的目的是为了保证数据的有效性和完整性。 这样就大幅度地提高了数据库中数据的质量,节省了数据库的空间和调用数据的时间。

之前介绍过 MySQL 中的数据类型,数据类型其实就能够对一部分数据进行校验。约束也一样,同样能够对一些数据进行校验工作。这样就可以尽量避免出现一些非法的数据

1.2 约束类型

常见约束的类型有以下几种:

  • not null: 指示某列不能存储 null 值
  • unique: 保证某列的每行必须是唯一值,不能有重复
  • default: 规定没有给列赋值时的默认值
  • primary key: 表示主键,是 not null unique 的结合。确保某列(或多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定的记录
  • foreign key: 保证一个表中的数据匹配另一个表中的值的参照完整性
  • check: 保证列中的值符合指定的条件。对于 MySQL 数据库,可以使用 check,但是其使用结果忽略

1.3 not null

如果不使用 not null,即表示默认情况下可以插入 null(即这列的值可以不填)

但是例如做一些调查问卷时,就有必填项,此时这些选项就不能为空,就可以使用 not null

示例:

1.4 unique

如果不使用 unique,那么某列不同行的值是可以重复的。

但实际生活中,例如身份证号码、电话号码等等其实是一个唯一值,此时就可以使用 unique

示例:

注意:

当列有 unique 约束时,进入插入前,就先会查找,如果要插入的值不存在,才会进行插入,因此使用 unique 其实会影响效率,但总的来说利大于弊。

1.5 default

当我们不使用 default 去指定列的默认值时,该默认值就为 null,如果你想改变某列的默认值,就可以使用 default

示例:

1.6 primary key

primary key 是主键,表示了一个记录的身份标识,相当于同时使用 not null 和 unique

示例:

注意:

  • 一张表中只能有一个主键
  • 主键可以由多个列联合形成

补充: 自动增量 —— auto_increment

MySQL 可以自动的为每个行分配下一个可用的编号,不用在添加一行时手动分配唯一值(可以手动分配唯一值)。但是必须用在 create 创建表的时候,例如:

注意:当使用自动增量和手动分配混搭时,这个唯一值就不一定是有序的了

1.7 foreign key

foreign key 是外键约束,可用于关联其它表的主键或唯一值

例如淘宝购物的话,一个数据库中可以有商品表和订单表两个数据表,而这两个表都可以包含商品编号。而订单表里面的商品编号一定是商品表里面有的前提下才可以出现。因此就可以使用外键来约束,防止非正常数据出现

示例:

作用:

外键约束将两张表绑定起来,其中被约束的表可以叫做子表,约束别人的表叫做父表,如果子表中的列要插入的值在父表中关联的主键或唯一值中没有,那么将插入将会失败

注意: 外键约束会导致父表中的记录不能直接删,那么想要删除父表的记录该怎么做呢?(例如要下架某个商品,该商品的编号也就没了)

解决思路: 逻辑删除(不直接删除数据库的记录,没有打破外键约束)

在商品表中引入一个新的字段,通过这个字段表示该记录是有效还是无效的。可以令这个字段默认值为1,即表示有效,如果要删除这个商品,就把这个字段改为0,此时该商品就无效了。

1.8 check

check 约束是可以指定某列可以填入的数据,例如性别,就只能填入男或者女

注意:

MySQL 中现在还不支持该约束,即使用了,也会忽略该约束的影响

示例:

2. 数据库表的设计

当我们掌握了基本的数据库的操作方法后,如果我们要面对一个从零开始建表的操作,势必要对我们需要的实体和它们之间的关系有一个很好的把握。

实体之间的关系主要存在以下四种:

  • 无关系
  • 一对一关系
  • 一对多关系
  • 多对多关系

2.1 一对一关系

例如一个学生对应着有一个系统的用户身份,我们就可以有两种设计方式

将学生信息和用户信息放到一个表中

 

学号学生姓名用户名用户密码
2001张三三娃***
2002李四四娃***
2003王五五娃***

将学生放到 A 表中,用户信息放到 B 表中,在 B 表中可以插入学生学号来将学生和用户进行关联

A 表:

 

学号学生姓名
2001张三
2002李四
2003王五

B 表:

用户名用户密码学生学号
三娃***2001
四娃***2002
五娃***2003

2.2 一对多关系

例如一般一个中学学生和班级之间是一对多的关系,一个学生只能有一个班级,一个班级里面可以有多个学生。

我们通常可以设计两张表,存放学生信息的 A 表,和班级信息的 B 表,在学生信息中添加班级来进行关联

A表:

学号学生姓名班级id
2001张三1
2002李四1
2003王五2

B 表:

班级id班级名称
1高三(1)班
2高三(2)班

2.3 多对多关系

例如大学生和课程之间,就是一个多对多的关系,一个学生可能有不同的多个课程,一个课程也有很多个学生来选择。

这时我们设计三个表,分别为存放学生信息的 A 表、存放课程信息的 B 表和将学生与课程联系起来的中间表 C 表

A表:

学号学生姓名
2001张三
2002李四
2003王五

B 表:

课程id课程名
1高等数学
2大学物理
3数据库理论

C 表:

学号课程id
20011
20012
20021
20023
20031

到此这篇关于MySQL 数据库的约束及数据表的设计原理的文章就介绍到这了,更多相关MySQL 数据库的约束及数据表设计内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • PostgreSQL USAGE和SELECT权限案例深入分析

    PostgreSQL USAGE和SELECT权限案例深入分析

    这篇文章主要介绍了PostgreSQL USAGE和SELECT权限案例深入分析,因为项目需求,需要学习PostgreSQL,本人之前学习过MYSQL,临时快速上手,尽快的去学习项目需要PostgREST
    2023-04-04
  • Centos 6.3将Mysql 5.1.61升级为mysql 5.6.19遇到的问题及解决方式

    Centos 6.3将Mysql 5.1.61升级为mysql 5.6.19遇到的问题及解决方式

    mysql5.6.19已经发布很久了,一直没有去升级,最近做项目需要mysql5.5以上,索性直接上5.6.19吧,原本以为升级这种事情,分分钟就完成了,没想到还是出了各种问题,下面把部分记录分享给大家
    2014-07-07
  • Mysql 查询JSON结果的相关函数汇总

    Mysql 查询JSON结果的相关函数汇总

    这篇文章主要介绍了Mysql 查询 JSON 结果的相关函数汇总,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-11-11
  • mysql登录遇到ERROR 1045问题解决方法

    mysql登录遇到ERROR 1045问题解决方法

    mysql登录时出现了错误:ERROR 1045: Access denied for user,究竟是什么原因呢?接下来为你详细介绍下,感兴趣的你可以参考下哈,或许可以帮助到你
    2013-03-03
  • 一文带你探究MySQL中的NULL

    一文带你探究MySQL中的NULL

    我们在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中,下面这篇文章主要给大家介绍了关于MySQL中NULL的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • MySQL内连接和外连接及七种SQL?JOINS的实现

    MySQL内连接和外连接及七种SQL?JOINS的实现

    这篇文章主要介绍了Mysql内连接和外连接的区别以及七种SQL?Joins的实现,相信看完这篇文章你对SQL内外连接的多表查询就足够理解了,需要的朋友可以参考下
    2023-03-03
  • 利用MySQL空间函数实现位置打卡的完整步骤

    利用MySQL空间函数实现位置打卡的完整步骤

    这篇文章主要给大家介绍了关于如何利用MySQL空间函数实现位置打卡的完整步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • MySQL表的四种分区类型详细介绍

    MySQL表的四种分区类型详细介绍

    这篇文章主要介绍了MySQL表的四种分区类型,RANGE分区,LIST分区,HASH分区,KEY分区,需要的朋友可以参考下
    2024-03-03
  • mysql优化配置参数

    mysql优化配置参数

    mysql安装好需要优化配置一下,打开c:\windows\my.ini文件
    2011-03-03
  • Windows下mysql-5.7.28下载、安装、配置教程图文详解

    Windows下mysql-5.7.28下载、安装、配置教程图文详解

    这篇文章主要介绍了Windows下mysql-5.7.28下载、安装、配置教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12

最新评论

?


http://www.vxiaotou.com