MYSQL————数据库的约束

1.约束类型

1.not null:指示某列不能存储null值

2.unique:保证某列的每行必须有唯一值

3.default:规定没有给列赋值时的默认值

4.primary key:not null和unique的结合。确保某列(或两个或多个列的结合)有唯一标识,有助于更容易更快捷的找到表中的一个特定记录。

5.foreign key:保证一个表中的数据匹配另一个表中的值的参照完整性。

6.check:保证列中的值符合指定的条件。对于MYSQL数据库,对check子句进行分析,但是忽略check子句

1.1 not null约束

not null:指示某列不能存储null值

创建表时,指定字段添加约束 

NO表示不能写入null

YES表示可以写入null


 1.当字段指定约束not null时,写入数据时,未写该字段,会报错,报Field '字段' doesn't have a default value,该字段没有默认值,你必须写上一个值

2.not null约束的字段,在写入数据时,不能对该字段写入null,数据库帮我们做了一次校验

3.只有当非空列有值时可以写入

1.2 unique (唯一约束)

指定某列为唯一的,不重复的:

 create table test(-> id int unique,-> name varchar(20)-> );

约束id字段为唯一的,不重复的


当test表中有了一条id为1,name为张三的数据,再插入一条id为1,name为李四的数据时,会报id重复的警告


当指定字段被unique约束时,插入的数据可以为null,当再次插入null的数据时,不会报错null可以重复插入

1.3default (默认约束)

规定没有给列赋值时的默认值

指定插入数据时,name为空,默认为无名氏

create table test(-> id int,-> name varchar(10) default'无名氏'-> );

当为某列设置了默认约束的时候,如果不给这个列指定值才会使用默认约束

虽然指定了默认约束,但是当我们手动指定这一列的值为null时,插入的值依然为null,因为这个null是我们手动指定的,可以理解为我们想要的值

用户指定的优先级要高于默认约束

1.4primary key(主键约束)

指定id列为主键

 create table test(-> id int primary key,-> name varchar(20)-> );

primary key是not null与unique的结合,确保某列(或两列或多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定记录

主键约束的列即使非空的,也是唯一的

列被标识为PRI,表示他是一个主键

1.写入数据时,两个约束同时生效

2.主键约束帮我们校验了非空和唯一,这两个校验在写入数据时对效率有一定影响,比起不做校验,这个性能消耗是可以承担的

3.建议为每一张表定义一个主键


auto_increment

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1。

 create table test(-> id int primary key auto_increment,-> name varchar(20)-> );

 让数据库帮我们去维护主键的增长,不用程序员自己去计算了,在插入的时候先找到最大的值,然后在这个基础上加1,生成一个新的值,作为新一个数据行主键id列的值


 全列插入

设置了自增主键之后,发现写入null时,也可以成功的插入数据

这里并不是说把null写入数据库了,而是说让数据库帮我们处理这个列的值(自增操作) 


指定列插入

 当删除前两条数据后,再插入数据,id列会在删除的最后一条数据上加一作为新的数据的id值,以上现象是有delete造成的

delete:delete即使删除全部数据,他并不会改变表的结构,可以回滚,所以你主键记录到的值是从之前的开始往下记录的

主键值可以自己添加,只要和之前的不同就行,所以主键值在数据1表有可能是不连续的

当再次添加数据时

 对于我们插入的数据,数据库会自动帮我们进行排序(在自增操作下)


一个表中不允许有两个主键

但是一个主键可以包含多个列(复合主键) 

在唯一校验时,只有复合主键中所有的列都相同才会被判定为相同 

主键的值时定义主键时,多个列值的组合

 1.5 foreign key 

保证一个表中的数据匹配另一个表中的值的参照完整性

 表中某个列的值,必须是另一张表中的主键列,或是唯一约束列的值,也就是当前表中的值必须在另一张表中存在,且满足主键或唯一约束


创建班级表和学生表

CREATE TABLE class(
id int PRIMARY KEY auto_increment,
name varchar(20)
);CREATE TABLE student(
id int PRIMARY KEY auto_increment,
name VARCHAR(20) not NULL,
class_id int 
);

当前表没有设置主外键关系


外键用于关联其他表的主键或唯一键

语法:

foreign key (字段名)references 主表(列)
 create table student(-> id int primary key auto_increment,-> name varchar(20) not null,-> class_id int,-> foreign key(class_id)references class(id)-> );

1.foreign key:创建外键的关键字

2.class_id:表示当前表中class_id这个字段要与主表建立主外键关系

3.references:关键字,表示后面要引用哪个表中的哪个列

4.class(id):指定主表和相应的列


 通过外键约束,保证数据的完整性和关系的正确性


删除主表的数据

1.删除主表数据,会报一个主外键关系的错误

2.如果要删除主表中的记录,子表中不能有对该条记录的依赖,也就意味着要先删除子表中的记录,再去删除主表中的记录

 

1.5 check

保证列中的值符合指定的条件。对于MYSQL数据库,对check子句进行分析,但是忽略check子句

 1.check关键字是用来检查这个值是否符合check后面的条件的

2.但是mysql8.0.16之前的版本不支持这个约束,所以写了也没什么效果

3.只有从8.0.16开始,check约束才被正式支持可以使用生效

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

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

相关文章

聊聊最近很火的后端即服务

最近,你可能经常听到“后端即服务”(Backend as a Service, BaaS)这个词。不论是在技术论坛上,还是在开发者社区,BaaS都成了大家讨论的热点。究竟是什么让这个概念如此火爆?今天我们就来聊聊这个话题&#…

TCP粘包和抓包

在 TCP 套接字中,发送和接收缓冲区用于暂存数据,以确保数据的可靠传输。具体来说,TCP 的 socket 收发缓冲区的主要特点和概念如下: 1. 发送缓冲区(Send Buffer) 定义: 发送缓冲区用于存储待发送的数据。应…

大模型从入门到精通——词向量及知识库介绍

词向量及知识库介绍 1.词向量 1.1 什么是词向量 词向量是一种将单词表示为实数向量的方式。每个单词通过一个高维向量来表示,向量的每一维都是一个实数,这些向量通常位于一个高维空间中。词向量的目标是将语义相似的单词映射到相邻的向量空间中&#…

自定义@ResponseBody以及SpringMVC总结

文章目录 1.需求分析2.目录3.自定义ResponseBody注解4.MonsterController.java5.Monster.java 实现序列化接口6.引入jackson7.Adapter.java 如果有ResponseBody注解就返回json8.测试9.SpringMVC执行流程 1.需求分析 2.目录 3.自定义ResponseBody注解 package com.sunxiansheng…

24暑假算法刷题 | Day39 | 动态规划 VII | LeetCode 198. 打家劫舍,213. 打家劫舍 II,337. 打家劫舍 III

目录 198. 打家劫舍题目描述题解 213. 打家劫舍 II题目描述题解 337. 打家劫舍 III题目描述题解 打家劫舍的一天 😈 198. 打家劫舍 点此跳转题目链接 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷…

(贪心) LeetCode 135. 分发糖果

原题链接 一. 题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。 相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xf…

OpenCV与AI深度学习 | 基于改进YOLOv8的景区行人检测算法

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:基于改进YOLOv8的景区行人检测算法 作者:贵向泉,刘世清,李立等 来源:《计算机工程》期刊 编…

docker应用

打包传输 1.将镜像打包 #查看帮助文件 docker --help #找到save,可以将镜像保存为一个tar包 docker save --help #查看save使用方式 #查看现有的镜像 docker images # docker save --output centos.tar centos:latest ls ...centos.tar... 可以将tar发送给其他用户…

class_4:条件语句和逻辑运算符

mood_index int(input("对象今天的心情怎么样!"))if mood_index > 80:print("今天可以好好happy一下了")print("O(∩_∩)O哈哈~") else:print("今天还是乖乖的吧!否则小命不保") #BMI 体重 /(身…

css实现闪烁渐变背景,@property自定义属性

自 2024 年 7 月起,此功能适用于最新的设备和浏览器版本。此功能可能无法在较旧的设备或浏览器中使用。 property 是 CSS 中一个相对较新的功能,主要用于定义自定义属性(即 CSS 变量)的类型、继承性以及初始值。它允许开发者更好地…

Linux --- 文件系统

1. 文件系统的概念 Linux 文件系统是一种用于管理、存储和组织数据的层次结构,用于在 Linux 操作系统中管理磁盘上的数据存储。它定义了如何在存储介质(如硬盘、固态硬盘或 USB 闪存)上组织文件和目录,以及如何读取、写入和操作这…

java整合DL645-2007与Dl645-1997

注意事项: 前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,有些没有FE的,也有4个FE的,所以对于接受程序,一定要慎重传输次序-所有的数据项都是先传低字节,…

鸿蒙HarmonyOS实战:IPC与RPC设备内进程通信

基本 IPC(Inter-Process Communication)与RPC(Remote Procedure Call)用于实现跨进程通信,不同的是前者使用Binder驱动,用于设备内的跨进程通信,后者使用软总线驱动,用于跨设备跨进…

Latex 插入图片或表格导致页面空白过多

如图所示: Latex 插入图片或表格导致页面空白过多 我们可以采用这个方式来减少空白。 \documentclass{article} \usepackage{graphicx} % 包含图形支持 \usepackage{caption} % 提供更多对caption的控制% 设置标题上方和下方的间距 \setlength{\abovecaptionskip}{…

学习记录:js算法(十二):柱状图中最大的矩形

文章目录 柱状图中最大的矩形我的思路网上思路 总结 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1:上图 输入:…

mac 安装Arthas

mac安装有两种方式 1.第一步安装Arthas 第一种: curl -L https://arthas.aliyun.com/install.sh | sh 第二种jar包形式 curl -O https://arthas.aliyun.com/arthas-boot.jar个人比较推荐第一种因为运行测试成功了 第一种安装后可能会出现一些命令不符合 需…

网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略

网安加社区【网安新声】栏目,汇聚网络安全领域的权威专家与资深学者,紧跟当下热点安全事件、剖析前沿技术动态及政策导向,以专业视野和前瞻洞察,引领行业共同探讨并应对新挑战的策略与可行路径。 近期,微软披露了一个最…

CyberScraper-2077+simple-one-api:使用大模型爬虫

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 swift与Internvl下的多模态大模型分布式微调指南(附代码和数据&#xff…

C语言典型例题50

《C程序设计教程(第四版)——谭浩强》 例题4.2 使用do……while语句循环求1234……100; 代码: //《C程序设计教程(第四版)——谭浩强》 //例题4.2 使用do……while语句循环求1234……100;#incl…

web后端(javaEE)开发——servlet

目录 一、web后端开发概述 二、web后端开发环境搭建 1.安装服务器软件 2.安装JDK 三、创建web后端项目 1.创建项目 2.修改设置 3.*在IDEA中集成Tomcat* 四、Servlet创建和应用 1.概述 2.Servlet程序创建与配置 3.分析Servlet程序结构 一、web后端开发概述 web开发&a…