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.mzph.cn/diannao/82371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LVGL- 按钮矩阵控件

1 按钮矩阵控件 lv_btnmatrix 是 LVGL(Light and Versatile Graphics Library) v8 中提供的一个非常实用的控件,用于创建带有多个按钮的矩阵布局。它常用于实现虚拟键盘、数字键盘、操作面板、选择菜单等场景,特别适用于嵌入式设…

excel 批量导出图片并指定命名

一、开发环境 打开excel文件中的宏编辑器和JS代码调试 工具-》开发工具-》WPS宏编辑器 左边是工程区,当打开多个excel时会有多个,要注意不要把代码写到其他工作簿去了 右边是代码区 二、编写代码 宏是js语言,因此变量或者方法可以网上搜…

yolov5基础--yolov5源码阅读(common.py)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 博主简介:努力学习的22级本科生一枚 🌟​;探索AI算法,C,go语言的世界;在迷茫中寻找光芒…

5.0.5 变换(旋转、缩放、扭曲)

WPF变换可以产生特殊效果,如平移、旋转、扭曲。 变换类 描述TranslateTransform沿着X轴和Y轴平移ScaleTransform 沿着定义的中心点缩放RotateTransform沿着定义的中心点旋转SkewTransform 扭曲元素MatrixTransfrom提供3x3矩阵,用于定义一个自定义变换 1…

如何设置内网映射端口到外网访问?哪些软件可以进行端口映射?

大多数时候我们所使用的服务器都是在内网搭建的,而且内网是可以访问外网的,但外网是没法直接访问内网IP和端口服务的。也就是说外网无法直接访问到内网的网络地址,需要大家去搭建一个内外网互通的桥梁,把内网服务器指定端口映射到…

养生:塑造健康生活的良方

养生是一场贯穿生活的自我关爱行动,从饮食、运动、睡眠到心态调节,每一个环节都对健康有着深远影响。以下为你带来全面且实用的养生策略。 饮食养生:科学搭配,呵护肠胃 合理规划三餐,遵循 “早营养、午均衡、晚清淡”…

YOLOv12云端GPU谷歌免费版训练模型

1.效果 2.打开 https://colab.research.google.com/?utm_sourcescs-index 3.上传代码 4.解压 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.进入yolov12-main目录 %cd /content/yolov12-main/yolov12-main 6.安装依赖库 !pip install -r requirements.…

机器人手臂的坐标变换:一步步计算齐次矩阵过程 [特殊字符]

大家好!今天我们来学习如何计算机器人手臂的坐标变换。别担心,我会用最简单的方式解释这个过程,就像搭积木一样简单! 一、理解问题 我们有一个机器人手臂,由多个关节组成。每个关节都有自己的坐标系,我们需要计算从世界坐标系(W)到末端执行器(P₃)的完整变换。 二、已…

CSS中的@import指令

一、什么是import指令&#xff1f; import 是CSS提供的一种引入外部样式表的方式&#xff0c;允许开发者在CSS文件中引入其他CSS文件&#xff0c;或者在HTML的<style>标签中引入外部样式。与常见的<link>标签相比&#xff0c;import 提供了一种更“CSS原生”的样式…

[学成在线]23-面试题总结

1. 详细说说你的项目吧 从以下几个方面进行项目介绍: 项目的背景&#xff0c;包括: 是自研还是外包、什么业务、服务的客户群是谁、谁去运营等问题。项目的业务流程项目的功能模块项目的技术架构个人工作职责个人负责模块的详细说明&#xff0c;包括模块的设计&#xff0c;所…

C++编程语言:标准库:标准库概观(Bjarne Stroustrup)

第30章 标准库概观(Standard-Library Overview) 目录 30.1 引言 30.1.1 标准库设施 30.1.2 设计约束 30.1.3 描述风格 30.2 头文件 30.3 语言支持 30.3.1 对initializer_list的支持 30.3.2 对范围for的支持 30.4 异常处理 30.4.1 异常 30.4.1…

spring5.x讲解介绍

Spring 5.x 是 Spring Framework 的重要版本升级&#xff0c;全面拥抱现代 Java 技术栈&#xff0c;其核心改进涵盖响应式编程、Java 8支持、性能优化及开发模式创新。以下从特性、架构和应用场景三个维度详细解析&#xff1a; 一、核心特性与架构改进 Java 8 全面支持 Spring …

【C++进阶】第2课—多态

文章目录 1. 认识多态2. 多态的定义和实现2.1 构成多态的必要条件2.2 虚函数2.3 虚函数的重写或覆盖2.4 协变(了解)2.5 析构函数的重写2.6 override和final关键字2.7 重载、重写、隐藏对比 3. 纯虚函数和抽象类4. 多态原理4.1 虚函数表指针4.2 多态的实现4.3 静态绑定和动态绑定…

Dive into LVGL (1) —— How LVGL works from top to down

0.briefly speaking 由于工作原因&#xff0c;最近开始接触到一些图形图像处理相关的知识&#xff0c;在这个过程中逐渐接触到了LVGL。作为一个开源的图形库&#xff0c;LVGL可以高效地为MCU、MPU等嵌入式设备构建美观的UI界面。我的手头也正好有一块集成了Vivante 2.5D GPU的…

【HarmonyOS 5】鸿蒙中进度条的使用详解

【HarmonyOS 5】鸿蒙中进度条的使用详解 一、HarmonyOS中Progress进度条的类型 HarmonyOS的ArkUI框架为开发者提供了多种类型的进度条&#xff0c;每种类型都有其独特的样式&#xff0c;以满足不同的设计需求。以下是几种常见的进度条类型&#xff1a; 线性进度条&#xff08;…

OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——gmp

准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 下载 wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 解压 tar -xf gmp-6.3.0.tar.xzcd gmp-6.3.0/ 环境变量 e…

量化交易策略的运行

✅ 什么是“策略的运行”&#xff1f; 在量化交易系统中&#xff0c;“策略的运行”并不一定意味着“每个策略对应一个线程”&#xff0c;但在大多数实际实现中&#xff0c;确实会使用线程、任务、协程或进程等形式来实现每个策略的独立调度与执行。 “运行”意味着策略开始生…

开平机:从原理到实践的全面技术剖析

一、开平机核心模块技术解析 1. 校平辊系的力学建模与辊型设计 校平机精度核心在于辊系设计&#xff0c;需通过弹塑性力学模型计算变形量。典型校平辊配置参数&#xff1a; 辊径比&#xff1a;校平辊直径&#xff08;D&#xff09;与板材厚度&#xff08;t&#xff09;需满足…

2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system

76个工业组件库示例汇总 实验室测控系统开发组件 这是一个专为实验室设备数据采集与分析设计的可视化测控系统组件。采用工业风格界面设计&#xff0c;提供了丰富的动态数据展示与分析功能&#xff0c;可应用于各类实验室环境中的设备监控和数据处理。 功能特点 多设备管理…

在 Kotlin 中什么是委托属性,简要说说其使用场景和原理

在 Kotlin 中&#xff0c;属性委托和类委托是两种通过 by 关键字实现的强大特性&#xff0c;它们通过“委托”机制将行为或实现逻辑委托给其他对象&#xff0c;从而实现代码的复用和解耦。 1 属性委托 定义&#xff1a; 允许把属性的 get 和 set 方法的具体实现委托给另一个对…