当前位置: 首页 > web >正文

MySQL初阶:数据库约束和表的设计

数据库约束

数据库约束是针对数据库中的表中的数据进行施加规则和条件,用于确保数据的准确性和可靠性。

数据库约束类型

1)not null 非空类型 :指定非空类型的列不能存储null,如果插入的数据是null便会报错。

2)default 默认约束:当没有指定插入值时,设定一个默认值进行插入。

当没有使用default设置默认值时,使用desc table 观察表的结构时,default这一栏就是null;这时在创建表时使用default设置默认值,就可以观察到default中设置的默认值。

3)unique唯一约束:指定约束的每列必须有唯一值。

指定列出现相同值会报错。

4)primary key 主键约束:每一行记录的身份标识,类似not null 和unique的组合,可以由一个或多个列组成,但是一个表里只能有一个主键。

主键必须是唯一值,且不能包含null。

这是直接创建主键:

创建自增主键:

自增主键一般是用于int ,bigint类型,如果使用主键修饰varchar就会报错。

主键值可以不连续,当默认自增主键时不设置值插入,由1开始自增,如果插入一条设置好值的记录,下一条记录就会从最大的值开始继续自增。

5)foreign key 外键约束:外键约束是一种关系型约束,用于两个表之间进行关联。

通过这样的两个表中,class中的classid通过外键去约束student中的classid这样的方式,此时,class表就叫做父表,student就叫做子表,父表是约束别人的表,具体而言就是student表的数据要出自class表中。

使用外键创建一个子表:

和主键不同,外键是像设置变量一样单独一项,foreign key后的括号内填写的是当前要创建子表时要用外键被约束的变量,references是出自的意思,后面接父表的约束别人的变量。

当插入一个不存在于父表的数据(只有被外键约束的变量要出自父表),就会报错;同样的要是修改一个不存在父表的值也会报错。

创建一个父表:

这里要注意要约束子表的变量要使用主键或unique修饰。

对父表而言,进行删除和修改的数据已经被子表引用也是不可取的,会报错,如果父表被外键约束的变量没有被子表引用,修改和删除是可操作的。

要想直接删除父表,会报错,因为要想删除父表要先删除父表里的记录,但是有一条记录被子表引用,此时就会报错。所以就要先删除子表再删除父表。

表的设计

根据实际的需求,明确要创建几个表,这几个表之间的存在什么样的关系:

先梳理好几个表中的“实体”(这里的实体例如教务系统中的学生,班级,作业.....)。

再确定实体间的关系。

实体间的关系

不同的关系设计表也是不同的

1)一对一:例如一个学生只能拥有一个账号,一个账号也只能被一个学生拥有。

2)一对多:例如一个学生只能在一个班级,但是一个班级可以包含多个学生。

3)多对多:一个学生可以选择多门课程,一门课程可以包含多个学生。

4)没关系

http://www.xdnf.cn/news/5107.html

相关文章:

  • Linux基础(关于进程相关命令)
  • WPDRRC 模型:构建动态闭环的信息安全防御体系
  • 深度学习系统学习系列【8】之设计卷积神经网络架构(Pytorch版本)
  • RHCSA Linux系统软件管理和进程管理
  • flowable-适配其他类型数据库,不修改源码解决方案
  • 位运算(二进制中1的个数)
  • uniapp自定义导航栏搭配插槽
  • Linux的进程与线程
  • 笔记,麦克风的灵敏度
  • Jedis高版本的JedisPoolConfig没有maxActive和maxWait
  • Linux使用Docker部署安装应用
  • Papyrus字体介绍
  • 为什么消息队列系统不像数据库系统那样可以配置读写分离?
  • Docker基础入门:容器化技术详解
  • PH热榜 | 2025-05-09
  • class path resource [] cannot be resolved to absolute file path
  • powershell_bypass.cna 插件(适配 Cobalt Strike 4.0 的免费版本下载地址)
  • FreeRTOS菜鸟入门(十四)·事件
  • Prometheus生产实战全流程详解(存储/负载/调度篇)
  • 认识拦截器
  • 如何获取NumPy数组中前N个最大值的索引
  • Qt6.x检查网络是否在线(与Qt 5.x不同)
  • 有关SOA和SpringCloud的区别
  • 软件设计师教程——第一章 计算机系统知识(下)
  • 数据库插入数据时自动生成
  • Python开发后端InfluxDB数据库测试接口
  • Python 数据分析与可视化:开启数据洞察之旅(5/10)
  • T-SQL在SQL Server中判断表、字段、索引、视图、触发器、Synonym等是否存在
  • 详解 c++17 重载类 overload的每一条语句,附实例.
  • Dify之八添加各种在线大模型