【MySQL数据库】 四

本文主要介绍了mysql数据库的几种常见的约束. 

一.数据库约束

我们希望存储的数据是靠谱的,mysql提供一些机制来辅助我们自动的依赖程序对数据进行检查 .

这类查数据的机制,就是约束

一旦约束好了,后续在进行增 删 改的时候,mysql就会自动的对修改的数据做出检查,如果不符合约束就会直接报错 !

not null

不是存储null值 . 跟在列名类型后面

unique

唯一 . 保证某列的某行必须有唯一的值

default

标识没有给值时候的默认值

primary key

主键 , 非空 唯一

foreign key

外键


  • not null

  • unique

指的是同一列不允许出现重复的值

设置id为unique,当插入两条id相同的数据,那么就会报错

  • default

如果未设置,使用默认值

  • primary key

主键约束

1.非空

2.不能重复

一个表只能有一个主键

自增主键

主键往往是一个整数类型的id,要求不能重复

允许客户端,在插入数据的时候,不手动指定主键的值,而是交给mysql自行分配,确保分配出来的这个主键的值,和之前的不重复

此时允许id设置为null,mysql会自动自增

mysql 服务器会维护id的最大值,每次从最大的id开始自增

如果mysql是一个单个节点的系统,基于上述策略,是没有问题的

如果mysql是一个分布式系统(有好几个主机,每个主机上都有mysql),此时自增主键就无法保证唯一性了


为了解决这个问题,市面上有一些分布式id的生成算法 ; 核心公式,目的就是为了保证系统上每个节点生成的id是唯一的 , 把id作为作为一个字符串,这个字符串由下列几个部分拼接成

1.主机编号/机房编号

2.时间戳

3.随机因子

生成的字符串格式的id就能够保证分布式系统下的唯一性了

分布式系统

由于一台主机的硬件资源是有限的 (cpu/内存/硬盘/网络带宽) ,增加主机就可以解决资源不足的问题.

  • foreign key

外键约束

父表:起约束的表

子表:受约束的表

1.插入或者修改子表中受约束的这一列的数据,就需要保证插入/修改后的数据在父表中是存在的. 如果是不存在的,就会报错

2.如果删除/修改父表中的记录,就需要看这个记录在子表中被使用了,如果被使用了,就不能进行删除/修改! ! !

索引

设置外键的时候,就会导致在进行的子表的时候,频繁的查询父表 ,这个操作是很耗时的,

为了加快查询速度,如果父表中的id这一列是带有索引,那就很好 

primary key和unique这两个约束,都是有索引的

3.没有索引,就不能建立外键

  • check

写一个具体的表达式 , 符合当前的记录条件就可以进行插入/修改

对于mysql5来说,不支持check (写了也无效)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132881.shtml

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

相关文章

openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述

文章目录 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述116.1 背景信息116.2 操作步骤 openGauss学习笔记-116 openGauss 数据库管理-设置数据库审计-审计概述 116.1 背景信息 数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作…

AWS:EC2实例创建步骤

创立步骤修改 播报 假如你现已准备好运用Amazon Web服务(AWS),那么,至少有两种做法能够用来创立以及运用AWS。一种做法是运用AWS API(应用程序编程接口)调用。主张你在大多数情况下运用第二种做法, 即AWS办理操控台,亚马逊的基于web的界面。 …

服务器搭建:从零开始创建自己的Spring Boot应用【含登录、注册功能】

当然,你可以先按照IDEA搭建SSM框架【配置类、新手向】完成基础框架的搭建 步骤 1:设计并实现服务器端的用户数据库 在这个示例中,我们将使用MySQL数据库。首先,你需要安装MySQL并创建一个数据库以存储用户信息。以下是一些基本步…

后端工程化 | SpringBoot 知识点

文章目录 [SpringBoot] 后端工程化1 需求2 开发流程3 RequestController 类(操作类)3.1 简单参数(形参名和请求参数名一致)3.2 简单参数(形参名和请求参数名不一致)3.3 复杂实体参数3.4 数组参数3.5 集合参…

【从0到1开发一个网关】网关Mock功能的实现

文章目录 什么是Mock?如何实现Mock什么是Mock? Mock(模拟)是一种测试技术,用于创建虚拟对象来模拟真实对象的行为。Mock对象模拟了真实对象的行为,但是不依赖于真实对象的实现细节。它们可以在测试中替代真实对象,以便进行独立的单元测试。 需要使用Mock的原因包括以下几…

COOHOM通过采用亚马逊云科“专库专用”的方式,为云原生的构建提供稳定的数据支撑

全球化浪潮下,面对全球化业务发展带来的新需求与新挑战,越来越多的企业开启了云原生构建旅程,以推动业务系统快速迭代,为国际业务的拓展打下坚实的基础。COOHOM是杭州群核信息技术有限公司旗下的国际化品牌。为全球企业和个人提供…

《面向对象软件工程》笔记——1-2章

“学习不仅是一种必要,而且是一种愉快的活动。” - 尼尔阿姆斯特朗 文章目录 第一章 面向对象软件工程的范畴历史方面经济方面维护方面现代软件维护观点交付后维护的重要性 需求、分析和设计方面团队开发方面没有计划,测试,文档阶段的原因面向…

8-3、T型加减速单片机程序【51单片机控制步进电机-TB6600系列】

摘要:根据前两节内容,已完成所有计算工作,本节内容介绍具体单片机程序流程及代码 一、程序流程图 根据前两节文章内容可知,T型加减速的关键内容是运动类型的判断以及定时器初值的计算,在输出运动参数后即可判断出运动…

Oracle(13)Maintaining Data Integrity

目录 一、基础知识 1、Data Integrity 数据库的完整性 2、Types of Constraints 约束类型 3、Constraint States 约束状态 4、Guidelines for Constraints 约束准则 二、基础操作 1、Enabling Constraints 启用约束 2、命令方式创建约束 3、修改表创建的约束 4、删除约…

JavaScript_Element对象_方法

1、Element.focus() Element.focus方法用于将当前页面的焦点,转移到指定元素上 2、Element.blur() Element.blur方法用于将焦点从当前元素移除 3、Element.remove() Element.remove方法用于将当前元素节点从它的父节点移除 4、Element.getBoundingClientRect() …

常用的电子邮件服务提供商有哪些?

当我们讨论常用的电子邮件服务时,可以根据国内和国外进行分类观察。以下是一些常见的国内和国外电子邮件服务。 什么是国外邮箱和国内邮箱? 国外邮箱是指在国外注册和使用的电子邮箱,而国内邮箱则是在国内注册和使用的电子邮箱。 国外邮箱是指…

链表(1)

目录 单链表 主函数test.c test1 test2 test3 test4 头文件&函数声明SList.h 函数实现SList.c 打印SLPrint 创建节点CreateNode 尾插SLPushBack 头插SLPushFront 头删SLPopBck 尾删SLPopFront 易错点 本篇开始链表学习。今天主要是单链表&OJ题目。 单链…

2.3 CSS 属性样式

1.字体属性 font-size:字体大小 Chrome浏览器支持的最小文字为12px,默认的文字大小为16px,并且0px会自动消失。不同浏览器默认的字体大小可能不一致,所以最好给一个明确的值,不要用默认大小。通常以给body设置font-si…

接口请求断言

接口请求断言是指在发起请求之后,对返回的响应内容去做判断,用来查看是否响应内容是否与规定的返回值相符。 在发起请求后,我们使用一个变量 r 存储响应的内容,也就是 Response 对象。 Response 对象有很多功能强大的方法可以调…

城市内涝怎么预警?万宾科技内涝积水监测仪

在城市运行过程中,城市内涝问题频繁出现,影响城市管理水平的提升,也会进一步减缓城市基础设施建设。尤其近几年来,城市内涝灾害频繁出现,在沿海地区内涝所带来的安全隐患成为城市应急管理部门的心头大患。城市内涝的背…

NIO和BIO

一:异步和同步的区别 同步:调用者要一直等待调用结果的通知后才能进行后续的执行 异步:指被调用方先返回应答让调用者先回去,然后再计算调用结果,计算完最终结果后再通知并返回给调用方 理解:同步、异步的…

Java8 时间字符串校验是否为对应的日期格式

时间字符串格式校验 严格模式下校验日期字符串 public static boolean isDateStrict(String dateStr, String pattern) {try {DateTimeFormatter formatter new DateTimeFormatterBuilder().appendPattern("yyyyMMdd").parseDefaulting(ChronoField.ERA, 1).toFor…

【JVM系列】- 挖掘·JVM堆内存结构

挖掘JVM堆内存结构 文章目录 挖掘JVM堆内存结构堆的核心概念堆的特点 堆的内存结构内存划分新生代/新生区(Young Generation)老年代(Tenured Generation)永久代(或元数据区)(PermGen 或 MetaSpa…

2023.11.4 Idea 配置国内 Maven 源

目录 配置国内 Maven 源 重新下载 jar 包 配置国内 Maven 源 <mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf> …

顺序表学习笔记(基础)

属于线性表旗下的一种&#xff0c;所以专门存储 one-to-one 关系的数据。 顺序表提供的具体实现方案是&#xff1a;将数据全部存储到一整块内存空间中&#xff0c;数据元素之间按照次序挨个存放。&#xff08;类似数组&#xff09; 顺序表中除了存储数据本身的值外&#xff0…