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

【MySQL约束】数据管理实用指南

1、数据库约束的认识

数据库约束的概念:数据库的约束是关系型数据库的一个重要的功能,它提供了一种“校验数据”合法性的机制,能够保证数据的“完整性”、“准确性”和“正确性”

数据库的约束:

  • not null:不能存储 null 值

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

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

  • primary key:主键,相当于 not null 和 unique 的结合,每条记录的身份标识

  • aoto_increment:自动添加主键值,也可以手动添加

  • foreign key:外键,多个表的关联关系,要求某个记录必须在另外一个表里存在

2、not null 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 not null,name 类型为varchar 最大存储 20 字符

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int not null,name varchar(20));

id 的约束为not null,说明 id 列不能为空

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 id 行 Null 列为 NO,也就说明 id 列不能为 NULL

3、unique 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 unique,name 类型为varchar 最大存储 20 字符

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int unique,name varchar(20));

id 的约束为 unique ,必须是唯一的、不能重复

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 id 行 key 列的为 UNI,也就说明 id 必须唯一不能重复

4、default 约束

创建一个student表,表中有两列,分别是: id 类型为 int ,name 类型为varchar 最大存储 20 字符约束为 default

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int,name varchar(20) default 'unkown');

name 的约束为 default ,当不给 name 添加内容的时候,默认为 unkown

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | unkown  |       |
+-------+-------------+------+-----+---------+-------+

查看student表的结构也就可以发现 name 行 Default 列的为 unkown,也就说明当不给 name 添加内容的时候默认为 unkown

5、primary key 约束

创建一个student表,表中有两列,分别是: id 类型为 int 约束为 primary ,name 类型为varchar 最大存储 20 字符

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int primary key,name varchar(20));

id 的约束为 primary key,说明id为主键,主键就相当于 not null 和 unique 的结合,不能为空、不能重复

desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

查看student 表的结构也就可以发现 id 行 Null 列为 NO,id 行 Key 列为 PRI,说明 id 不能为空、不能重复

当我们创建 student 表的时候,将 id 设置为 not null 和 unique 的时候,也就等于 primary key

-- 如果已有student表,请先删除,因为同一个库里面不能存在相同名的表
create table student(id int not null unique,name varchar(20));
desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

当把 id 的约束设置为 not null 和 unique 的时候,查看student 表结构的时候,发现跟约束为primary key的结构一样

6、auto_increment 约束

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

create table student(id int primary key auto_increment,name varchar(20));
desc student;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

当把 id 的约束设置为 primary key 和 auto_increment 的时候,不给 id 添加内容时默认是最大值+1

当我们光给这个表中的name列添加内容时

create table student(id int primary key auto_increment,name varchar(20));
select * from student;
+----+------+
| id | name |
+----+------+
|  1 | 张三 |
|  2 | 李四 |
+----+------+

id 列会默认添加值,且是最大值+1

7、foreign key 约束

外键用于关联其他表的主键和唯一值,让两个表之间产生约束,语法:

foreign key (字段名) references 主表(列)

先创建一个class班级表:

create table class(id int primary key auto_increment,className varchar(20));

class 表中有两个列,分别为:

  • id 列,类型为 int,约束为 primary key 和 auto increment

  • className 列,类型为 varchar 最多存储 20字符

先创建一个 student 学生表:

create table student(id int primary key auto_increment,classId int ,
name varchar(20),
foreign key (classId) references class (id));

student 表中有三个列,分别为:

  • id 列,类型为 int,约束为 primary key 和 auto increment

  • classId 列,类型为 int

  • name 列,类型为 varchar 最多存储 20字符

  • classId为外键与class表中的id 产生约束

学生表中的数据,要依赖班级表的数据,班级表的数据要对学生表产生约束力

此处起到约束作用的班级表,就叫做“父表”;被约束的这个表,就叫做“子表”

给class表添加一些内容:

insert into class (className) values('Java'),('C'),('python');

给student表添加一些内容:

insert into student (classId,name) values(1,'张三'),(1,'李四'),(2,'王五'),(3,'赵六');

相关文章:

【MySQL约束】数据管理实用指南

1、数据库约束的认识 数据库约束的概念:数据库的约束是关系型数据库的一个重要的功能,它提供了一种“校验数据”合法性的机制,能够保证数据的“完整性”、“准确性”和“正确性” 数据库的约束: not null:不能存储 nul…...

2023年第二十届五一数学建模竞赛C题:“双碳”目标下低碳建筑研究-思路详解与代码答案

该题对于模型的考察难度较低,难度在于数据的搜集以及选取与处理。 这里推荐数据查询的网站:中国碳核算数据库(CEADs) https://www.ceads.net.cn/ 国家数据 国家数据​data.stats.gov.cn/easyquery.htm?cnC01 以及各省市《统…...

Vue父组件生命周期和子组件生命周期触发顺序

加载渲染过程 父 beforeCreate -> 父 created -> 父 beforeMount -> 子 beforeCreate -> 子 created -> 子 beforeMount -> 子 mounted -> 父 mounted子组件更新过程 父 beforeUpdate -> 子 beforeUpdate -> 子 updated -> 父 updated父组件更新…...

DevOps工程师 - 面试手册

DevOps工程师 - 面试手册 岗位概述 DevOps工程师是一种专注于提高软件开发和运维团队协作、提高软件产品交付速度和质量的职位。这种角色要求具备跨领域的知识,以便在开发和运维过程中建立起稳定、可靠的基础设施和自动化流程。 常见的职位招聘描述 负责设计、实…...

Netty内存管理--内存池空间规格化SizeClasses

一、规格化 内存池类似于一个内存零售商, 从操作系统中申请一整块内存, 然后对其进行合理分割, 将分割后的小内存返回给程序。这里存在3个尺寸: 分割尺寸: 底层内存管理的基本单位, 比如常见的以页为单位分配, 但是页的大小是灵活的;申请尺寸: 内存使用者希望申请到的内存大小…...

数据结构刷题(三十):96不同的二叉搜索树、01背包问题理论、416分割等和子集

一、96. 不同的二叉搜索树 1.这个题比较难想递推公式, dp[3],就是元素1为头结点搜索树的数量 元素2为头结点BFS的数量 元素3为头结点BFS的数量 元素1为头结点搜索树的数量 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量 元素2为头结…...

bash的进程与欢迎讯息自定义

在bash shell中,可以通过多种方式自定义欢迎讯息和提示符。主要有: 修改/etc/profile文件: 该文件在用户登录后执行,定义了PROMPT_COMMAND和PS1提示符。可以修改其内容实现自定义欢迎讯息和提示符。 例如,修改为: bash PROMPT_COMMANDecho -e "\nWelcome to My Bash She…...

本周大新闻|苹果首款MR没有主打卖点;Meta认为AI是AR OS的基础

​本周XR大新闻,AR方面,苹果首款MR或没有主打卖点,反而尽可能支持更多App和服务;扎克伯格表示基于AI的AR眼镜操作系统是下一代计算平台的基础;微软芯片工程VP Jean Boufarhat加入Meta芯片团队;Humane展示了…...

Java中工具类Arrays、Collections、Objects

Arrays Arrays是Java中提供的一个针对数组操作的工具类,所有的方法都是静态的。 大致有这些常用的方法 sort()针对常用的基本数据类型,都能进行排序,byte、char、int、long、float、doubleparallelSort()并行排序,多线程排序&am…...

Docker安装Nginx/Python/Golang/Vscode【亲测可用】

一、docker安装nginx docker安装nginx,安装的是最新版本的:docker pull nginx:latest 创建一个容器:docker run --name my-nginx -p 80:80 -d nginx:latest 开启一个交互模式终端:docker exec -it my-nginx bash 创建django项…...

蓝桥杯2022年第十三届决赛真题-最大数字

蓝桥杯2022年第十三届决赛真题-最大数字 时间限制: 3s 内存限制: 320MB 题目描述 给定一个正整数 N。你可以对 N 的任意一位数字执行任意次以下 2 种操作: 将该位数字加 1。如果该位数字已经是 9,加 1 之后变成 0。 将该位数字减 1。如果该位数字已经…...

smbms项目搭建

目录 1.搭建一个maven web项目 2.配置Tomcat 3.测试项目是否能够跑起来 4.导入项目中会遇到的Jar包 5.项目结构搭建 6.项目实体类搭建 7.编写基础公共类 1.数据库配置文件 2.编写数据库的公共类 3.编写字符编码过滤器 3.1web配置注册 4.导入静态资源 1.搭建一个maven web项目 …...

进程/线程 状态模型详解

前言:最近操作系统复习到线程的状态模型(也可以说进程的状态模型,本文直接用线程来说)时候,网上查阅资料,发现很多文章都说的很不一样,有五状态模型、六状态模型、七状态模型.......虽然都是对的…...

数据结构与算法之队列: Leetcode 621. 任务调度器 (Typescript版)

任务调度器 https://leetcode.cn/problems/task-scheduler/ 描述 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&#…...

【报错】arXiv上传文章出现XXX.sty not found

笔者在overleaf上编译文章一切正常,但上传文章到arxiv时出现类似于如下报错: 一般情况下观察arxiv的编译log,不通过的原因,很多时候都是由于某一行导入了啥package,引起的报错;但是如果没有任何一个具体的…...

项目合同管理

项目合同管理的基本概念及分类、项目合同签订、项目合同管理以及项目合同索赔处理等内容 信息系统工程的建设过程实际上就是合同的执行和监控的过程 1、项目合同的概念及分类 合同法律关系:权力和义务关系 合同可以是书面形式、口头形式和其他形式 书面形式是指…...

聊聊ClickHouse向量化执行引擎-过滤操作

俄罗斯Yandex开发的ClickHouse是一款性能黑马的OLAP数据库,其对SIMD的灵活运用给其带来了难以置信的性能。本文我们聊聊它如何对过滤操作进行SIMD优化。 基本思想 1、有一个数组data,即ColumnVector::data,存放数据 2、使用uint8类型&#xf…...

数据可视化第二版-拓展-网约车分析案例

文章目录 数据可视化第二版-拓展-网约车分析案例竞赛介绍 1等奖作品-IT从业者张某某的作品结论过程数据和思考数据处理数据探索数据分析方法选择数据分析相关性分析转化率分析分析结论 完单数量分析分析结论 司机数量分析分析结论 时间分析每日订单分析 工作日各时段分析周六日…...

pytest - Getting Start

前言 项目开发中有很多的功能,通常开发人员需要对自己编写的代码进行自测,除了借助postman等工具进行测试外,还需要编写单元测试对开发的代码进行测试,通过单元测试来判断代码是否能够实现需求,本文介绍的pytest模块是…...

( 字符串) 205. 同构字符串 ——【Leetcode每日一题】

❓205. 同构字符串 难度:简单 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同…...

python+django+vue消防知识宣传网站

开发语言:Python 框架:django Python版本:python3.7.7 数据库:mysql 数据库工具:Navicat 开发软件:PyCharm 层随着移动应用技术的发展,越来越多的消防单位借助于移动手机、电脑完成生活中的事…...

彻底告别手动配置任务,魔改xxl-job!

分析 改造 1、接口调用 2、创建新注解 3、自动注册核心 4、自动装配 测试 测试后 XXL-Job是一款非常优秀的任务调度中间件,其轻量级、使用简单、支持分布式等优点,被广泛应用在我们的项目中,解决了不少定时任务的调度问题。不仅如此&a…...

【五一创作】Springboot+多环境+多数据源(MySQL+Phoenix)配置及查询(多知识点)

文章目录 1. 背景2. 技术点3 子模块依赖SpringBoot设置4. 多环境配置4.1 application.yml4.2 application-pro.yml 5. 多数据源配置5.1 yml配置5.2 自定义数据源在Java中配置5.2.1 PhoenixDataSourceConfig5.2.2 MysqlDataSourceConfig 6. 完整的Pom6. 测试6.1 Mapper配置6.2 方…...

Python小姿势 - 线程和进程:

线程和进程: Python里面线程是真正的并行执行,进程是可以并行执行的。 所谓进程,就是操作系统中执行一个程序的独立单元,它是系统进行资源分配和调度的基本单位。一个进程可以创建和撤销另一个进程,同一个进程内可以并…...

Mysql 锁

目录 0 课程视频 1 概述 1.1 多用户 并发访问 -> 为了数据一致性(多用户) 1.2 全局锁 数据库所有表 1.3 表级锁 每次操作 锁整张表 1.4 行级锁 每次操作 锁对应行 2 全局锁 ->锁后只读 -> 全库逻辑备份 2.1 阻塞DML /DDL 可DQL读 2.2 语法 2.2.1 加锁 flush…...

基于ssm的论坛系统的设计与实现【附源码】

基于ssm的论坛系统的设计与实现 摘 要 早期的网络论坛系统已经诞生一段时间,随着互联网技术的发展,它已经从最初的简单电子公告板系统变成了一种丰富的论坛系统社区模型。人们通过论坛系统进行信息的获取、发布和交流已经成为一种普遍的社交方式&#x…...

Vue中的事件修饰符

Vue中的事件修饰符: 1.prevent: 阻止默认事件 (常用) : 2.stop: 阻止事件冒泡 (常用) : 3.once: 事件只触发一次(常用) : 4.capture:使用事件的捕获模式: 5.self: 只有event.target是当前操作的元素是才触发事件; 6.passive:事件的默认行为立即执行,无需等待事件回调…...

如何保证Redis和数据库的一致性

关注我,升职加薪就是你! 当我们对数据进行修改的时候,到底是先删缓存,还是先写数据库? 1、如果先删缓存,再写数据库:在高并发场景下,当第一个线程删除了缓存,还没来得及写…...

Ubantu docker学习笔记(八)私有仓库

文章目录 一、建立HTTPS链接1.在仓库服务器上获取TLS证书1.1 生成证书颁发机构证书1.2 生成服务器证书1.3 利用证书运行仓库容器 2.让私有仓库支持HTTPS3.客户端端配置 二、基本身份验证三、对外隐藏仓库服务器3.1 在服务器端3.2 在客户端进行 四、仓库可视化 在前面的学习中&a…...

【五一创作】网络协议与攻击模拟-01-wireshark使用-捕获过滤器

协议 TCP/IP协议簇 网络接口层(没有特定的协议)PPPOE 物理层 数据链路层 网络层:IP (v4/v6) ARP (地址解析协议) RARP ICMP (Internet控制报文协议) IGMP 传输层:TCP(传输控制协议) UDP(用户数据报协议) 应用层:都是基于传输层协议的端口,总共端口0~65535 0~1023 HTTP—t…...

女生做网站推广/地推网推平台

lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子: deff(x): returnx**2printf(4)Python中使用lambda的话,写成这样 g lambdax : x**2printg(4)lambda表达式在很多编程语言都有对应的实现。比如C#&#xf…...

陕西煤化建设集团网站/高端网站建设案例

首先是虚拟光驱安装,传说demotools和WIN 7有点问题,放弃。这里推荐Virtual CloneDrive,完全免费的,下载地址:http://static.slysoft.com/SetupVirtualCloneDrive5425.exe接着安装VS 2008安装过程很顺利,而且…...

做网站在哪个程序做/宁波网站建设推广公司价格

国家集训队1999论文集陈宏:《数据结构的选择与算法效率——从IOI98试题PICTURE谈起》来煜坤:《把握本质,灵活运用——动态规划的深入探讨》齐鑫:《搜索方法中的剪枝优化》邵铮:《数学模型的建立、比较和应用》石润婷&a…...

网站建设与设计开题报告/郑州seo建站

为了避免全局变量泛滥导致冲突,最简单有效的办法是用匿名函数将脚本包起来,让变量的作用域控制在函数之内。 转载于:https://www.cnblogs.com/wangxuchun/p/3761181.html...

面试网站建设问题/电话营销销售系统

“云计算”这个词在今年颇为流行,以至于我终于不能再继续厚着脸皮当作没看到了。最初,我以为云计算就是一堆客户端计算机紧密的团结在一起,为一个共同的伟大的问题而献出自己的业余时间。后来某男告诉我,那叫网格计算,…...

个人做网站能赚到钱吗/百度搜索下载

示例: $.ajax({ url: url, crossDomain: true, async: false,dataType:"jsonp" }); 说明:$.ajax()有很多参数,实现跨域访问的关键是crossDomain必须设置为true,dataType必须设置为"jsonp&qu…...