【MySQL数据库】 四

news2024/11/27 20:58:58

本文主要介绍了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.coloradmin.cn/o/1175277.html

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

相关文章

并发编程: 2. 线程管控

给定一个线程,只要令std::thread对象与之关联,就能管控该线程的几乎每个细节。 2.1 线程的基本管控 2.1.1 发起线程 线程通过构建std::thread对象而启动,该对象指明线程要运行的任务(函数)。简单的任务,…

【大数据】NiFi 中的重要术语

NiFi 中的重要术语 1.Flow Controller2.Processor3.Connection4.Controller Service5.Process Group6.FlowFile 那些一个个黑匣子称为 Processor,它们通过称为 Connection 的队列交换名为 FlowFile 的信息块。最后,FlowFile Controller 负责管理这些组件…

隐私安全|隐私安全已从国家法律法规转向商业企业应用,如何理解以及落地建设,相信大家正在经历隐私安全的困扰

网络空间的隐私安全主要是指网络隐私权不受侵犯,网络隐私权是指自然人在网上享有的,与公共利益无关的个人活动领域与个人信息秘密依法受到保护,不被他人非法侵扰,知悉收集,利用和公开的一种人格权,也包括第…

基于鹰栖息算法的无人机航迹规划-附代码

基于鹰栖息算法的无人机航迹规划 文章目录 基于鹰栖息算法的无人机航迹规划1.鹰栖息搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用鹰栖息算法来优化无人机航迹规划。 1.鹰栖息…

ActiveMq学习⑧__ActiveMQ的消息持久化机制

ActiveMQ的消息存储和持久化 MQ的高可用 事务持久签收可持久化 (类似于与mq消息的同步机制) 为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一半都会采用持久化机制。 ActiveMQ的消息持久化机制 Act…

canvas实现刮奖功能

canvas刮奖原理很简单,就是在刮奖区添加两个canvas,第一个canvas用于显示刮开后显示的内容,可以是一张图片或一个字符串,第二个canvas用于显示涂层,可以用一张图片或用纯色填充,第二个canvas覆盖在第一个ca…

逆向学习记录(5)刷机

首要前提:手机刷机必须OEM解锁(BL解锁),否则不能刷机! 1、根据手机机型下载手机系统包,首次登陆网址需要同意协议。然后在右侧选机型,中间就出来各种适合本机型的系统。 下载网址 https://dev…

47基于matlab的水印提取,将水印和载体进行图像融合

基于matlab的水印提取,将水印和载体进行图像融合,成为一体,可对合成图像进行加噪处理,剪切处理,小波压缩处理,旋转处理等操作,最后对合成图像实现水印提取,程序已调通,可…

【AI好好玩02】利用Lama Cleaner本地实现AIGC试玩:擦除对象、替换对象、更换风格等等

目录 一、安装二、擦除功能1. LaMa模型实操实例一:去除路人实操实例二:去水印实操实例三:老照片修复 2. LDM模型3. ZITS模型4. MAT模型5. FcF模型6. Manga模型 三、替换对象功能1. sd1.52. sd23. anything44. realisticVision1.45. 四个模型的…

Tomcat安装配置教程

目录 1、安装tomcat1.1、查看JDK版本1.2、 匹配对应的JDK版本1.3、 下载Tomcat1.3.1、 安装包版(推荐,不用配环境)1.3.2、 压缩包版 2、 运行Tomcat3、 不能运行问题 1、安装tomcat 1.1、查看JDK版本 由于不同版本tomcat对于jdk的版本有要求…

Mac 下安装golang环境

一、下载安装包 安装包下载地址 下载完成,直接继续----->下一步到结束即可安装成功; 安装成功之后,验证一下; go version二、配置环境变量 终端输入vim ~/.zshrc进入配置文件,输入i进行编辑 打开的不管是空文本…

redis教程 二 redis客户端Jedis使用

文章目录 Redis的Java客户端-JedisJedis快速入门创建工程:引入依赖:建立连接测试:释放资源Jedis连接池创建Jedis的连接池改造原始代码 Redis的Java客户端-SpringDataRedis快速入门导入pom坐标配置文件测试代码 数据序列化器StringRedisTempla…

“第六十一天”

这三个也算一类的,减和加的处理差不多,不过这个题多了限制是被减数大于减数,要是想再完整一点,可以把小于的情况也考虑进去,不过这个我是如果被减数小于减数的话,我就用减数加被减数,然后最后打…

JVM 各个参数详解

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。 PermGen space:全称是Permanent Generation space.就是说是永久…

ActiveMq学习⑤__ActiveMq的Broker

ActiveMq的Broker 是什么? 相当于一个ActiveMq的服务器实例 Broker其实就是实现了用代码的形式启动ActiveMQ将MQ嵌入到Java 代码中,以便随时用随时启动,在用的时候再去启动这样节省了资源,也保证了可靠性。 按照不同的配置文件…

线程的创建、等待、退出

多线程开发在Linux平台上已经有成熟的pthread库支持,所以使用pthread库在编译时要加上-pthread。其设计的多线程开发的基本概念主要包含3点:线程、互斥锁、条件。其中线程操作又分线程的创建、退出、等待三种。互斥锁包含4种操作,分别是创建、…

线程同步——互斥量解锁、解锁

类似与进程间通信信号量的加锁解锁。 对互斥量进行加锁后,任何其他试图在此对互斥量加锁的线程都会被阻塞,直到当前线程释放该互斥锁。如果释放互斥锁时有多个线程被阻塞,所有在该互斥锁上的阻塞线程都会变成可运行状态,第一个变…

《算计》

第一章:机器的诞生 在一个科技高度发达的未来世界,人类社会已经进入了自主机器时代。人们创造出了一种名为“超级自主机器(Super Autonomous Machine,简称SAM)”的全新型机器,它拥有无限的智慧和学习能力&a…

LeetCode.6 N字形变换

一开始想的是真的创建一个数组 去按照题目所给的要求填入数据 最后输出不为空的数组项 但是不仅时间复杂度高 而且错误频繁出现 最终也没有提交成功 查阅题解后发现数组并不重要 假设我们忽略掉数组中的那些空白项 最终输出的结果就是numRows行的字符串的拼接 string conver…

基于Matlab的yolo算法行人检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 # 基于Matlab编写的Yolo算法行人检测系统介绍 基于Matlab编写的Yolo算法行人检测系统是一种用于自动检测图像或视频…