MySQL【知识改变命运】08

数据库约束

  • 1:约束的几个类型
  • 2:NOT NULL非空约束
  • 3:UNIQUE 唯⼀约束
  • 4:PRIMARY KEY 主键约束
    • 4.1:回顾
  • 5:FOREIGN KEY 外键约束
    • 5.1:创建班级表(主表),并初始化数据
    • 5.2:重构学⽣表(从表),加⼊外键约束
  • 6:DEFALUT 默认值约束
  • 7:CHECK 约束

数据库约束是关系型数据库的一个重要约束
主要保证数据插入的有效性(数据本身是否正确,关联关系是否正确)
人工检查数据工作量太大了,在数据库中定义一些约束,那么数据在写入数据库时候,就会帮助我们做一些检查。

1:约束的几个类型

类型说明
NOT NULl非空约束指定非空约束列不能出现NULL 值
DEFALUT 默认约束当前没有给指定列值时候。默认使用默认值。
UNIQUE 唯一约束指定唯一约束的列,这条列上面不能出现相同的值
FRIMARY KEY 主键约束NOT NULL和UNIQUE的结合,可以指定一个或者多个列(复合主键),但是只能有一个主键,有助于数据的查询
POREIGN KEY 外键约束外键约束关联两张表
CHECK 约束用于限制或数据库表中的值,确保数据可靠性,准确性

2:NOT NULL非空约束

创建一个表:
在这里插入图片描述

创建一个学生表中,name一般不能为NULL,名字为那样就没有意义。我们就要给名字加上NOTNULL 非空约束条件;
在这里插入图片描述
在这里插入图片描述
我们查询表结构,就可以看出来NULL那一列为no表示不能为NULL值

在这里插入图片描述
这样name这一列添加NULL就会报错。

3:UNIQUE 唯⼀约束

当我们设置让一个列有唯一值时候,就可以给这列设置UNIQUE ,比如我们让id列为唯一值;
创建一个表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们给id列限制了UNIQUE,id就不能插入重复值,所有当第二次插入数据时候,就报错了,但是可以插入NULL
在这里插入图片描述

4:PRIMARY KEY 主键约束

主键约束唯⼀标识数据库表中的每条记录。
主键必须包含唯⼀的值,且不能包含 NULL 值。
每个表只能有⼀个主键,可以由单个列或多个列组成。
通常为每张表都指定⼀个主键,主键列建议使⽤BIGINT类型

在这里插入图片描述
在这里插入图片描述
主键=唯一+非空。
我们也可以给主键加入自增列标识:

在这里插入图片描述
我们在设置AUTO_INCREMENT前id列是不可以插入NULL,但是设置后,可以插入NULL,但是NULL会被转化id自增列的数据
在这里插入图片描述

在这里插入图片描述
我们也可以手动设置主键列的值auto_increment
在这里插入图片描述
在这里插入图片描述
下次auto_increment 就是从1001开始计数。

每个表只能有一个主键
在这里插入图片描述
但是一个主键可以包含多个列:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果是复合健必须所有列都是一样的才能被判定为一样。、
在这里插入图片描述
替换,如果存在冲突则替换,不存在冲突则插⼊

# 语法
REPLACE [INTO] table_name
 [(column [, column] ...)]
VALUES
 (value_list) [, (value_list)] ...
value_list: value, [, value] ...

4.1:回顾

在这里插入图片描述
接下来介绍一下自增操作:
自增操作不管插入数据失败还是成功都不会回退,自增操作在插入的前面。

5:FOREIGN KEY 外键约束

外键⽤于定义主表和从表之间的关系
外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束
当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。

5.1:创建班级表(主表),并初始化数据

在这里插入图片描述

5.2:重构学⽣表(从表),加⼊外键约束

# 语法:
foreign key (id) references class(id)
drop table if exists student;



# 重构表
create table student(
id bigint PRIMARY KEY auto_increment, 
 name varchar(20) not null,
 age int DEFAULT 18,
 class_id bigint,
 foreign key (class_id) references class(id) # 创建外键约束
);

查看表结构,Key列的值为MUL表⽰外键约束的列
在这里插入图片描述
正常插⼊数据
在这里插入图片描述
插⼊⼀个班级号为100的学⽣,由于主表中没有这个班级,插⼊失败
在这里插入图片描述
插⼊班级Id为NULL的记录,可以成功,表⽰当前学⽣还没有分配置班级
在这里插入图片描述
删除主表某条记录时,从表中不能有对该记录的引⽤
在这里插入图片描述
删除主表某条记录时,从表中不能有对该记录的引⽤
在这里插入图片描述
删除主表时要先删除从表

6:DEFALUT 默认值约束

DEFAULT 约束⽤于向列中插⼊默认值,如果没有为列设置值,那么会将默认值设置到该列
语法:

DEFALUT 默认值

7:CHECK 约束

可以应⽤于⼀个或多个列,⽤于限制列中可接受的数据值,从⽽确保数据的完整性和准确性。在8.0.16开始全⾯⽀持CHECK约束,之前的版本会忽略CHECK的定义
但是注意,一般再应用程序级别校验

create table student(
 id bigint PRIMARY KEY auto_increment, # 设置⾃增主键
 name varchar(20) not null,
 age int DEFAULT 18,
 gender char(1),
 check (age >= 16),
 check (gender = '男' or gender = '⼥')
);

列与列之间也可以⽐较,需要在单独⼀⾏中定义

create table t_check (
 c1 int check(c1 <> 0),
 c2 int check(c2 > 0),
 c3 int,
 check(c3 >= c2)
);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Golang】Go语言http编程底层逻辑实现原理与实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Docker 拉取镜像时配置可用镜像源(包含国内可用镜像源)

文章目录 写在前面一、Docker 官方源二、更换Docker 国内可用镜像源 &#xff08;推荐使用&#xff09;参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04&#xff0c;docker-27.3.1 一、Docker 官方源 打开 /etc/docker/daemon.json文件&#xff1a; sudo gedit …

STM32F4- SD卡和 FATFS文件系统

单片机系统常需大容量存储设备&#xff0c;如U盘、FLASH芯片、SD卡等。 其中&#xff0c;SD卡因容量大、支持SPI/SDIO驱动、尺寸多样&#xff0c;成为单片机系统的优选。 STM32F4开发板自带SD卡接口&#xff0c;使用SDIO接口驱动&#xff0c;支持高速数据传输。 1.1 SDIO 简介…

JavaWeb学习(1)

目录 一、什么是JavaWeb 二、静态web和动态web 三、Web服务器&#xff08;Tomcat&#xff09; 四、Http 4.1 是什么 4.2 两个时代 4.3 Http请求 4.4 Http响应 五、Maven 六、Servlet 七、HttpServletResponse 7.1 常见应用 7.1.1 向浏览器输出消息 7.1.2 下载文件 …

为您的人工智能数据提供类似 Git 的版本管理功能

您过去肯定有过版本控制代码。但是&#xff0c;您是否对数据进行了版本控制&#xff1f;您是否曾经想过与不同的团队协作处理大量数据&#xff0c;而无需提交大量数据&#xff1f;想象一下&#xff0c;使用类似 git 的命令来运行类似存储库的生态系统&#xff0c;在该生态系统中…

Unity实现自定义图集(三)

以下内容是根据Unity 2020.1.0f1版本进行编写的   1、实现编辑器模式下进游戏前Pack全部自定义图集 同Unity的图集一样,Unity的编辑器模式会在进游戏前把全部的SpriteAtlas都打一次图集,如图: 我们也实现这样的效果。 首先需要获取全部的图集路径。因为目前使用的是以.…

RISC-V笔记——RVWMO基本体

1. 前言 RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering)&#xff0c;它是Release Consistency的扩展&#xff0c;因此&#xff0c;RVWMO的基本特性类似于RC模型。 2. RC模型 Release consistency(RC)的提出是基于一个观察&#xff1a;将所有同步操作用FENCE围在一…

全国职业技能大赛——信息安全管理与评估第一阶段BC、FW、WAF题目详细解析过程

💗需要职业技能大赛环境+WP,请联系我!🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 一个想当文人的黑客 ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【edusrc漏洞挖掘】 【VulnHub靶场复现】【面试分析】 🎉欢迎关注💗一起学习👍一起讨论⭐️一起…

【WPF】中ListBox的ListBox选项的选中状态在弹出MessageBox后失效的解决办法

1.问题描述 1.1 ListBox选项的样式 在WPF中&#xff0c;可以通过定义ListBoxItem的样式来改变ListBox选项的选中状态。这通常涉及到使用ControlTemplate和Trigger来指定当ListBoxItem处于不同状态时&#xff08;如被选中、鼠标悬停等&#xff09;的外观。ListBoxItem设置不同…

TikTok零播放的原因及解决方法

TikTok作为一个月活跃用户数已经超过15亿的社媒平台&#xff0c;巨大的流量不断吸引着用户加入&#xff0c;其中不乏需要推广获客的卖家。在运营推广工作中&#xff0c;视频播放量是重要的评估维度&#xff0c;如果出现零播放的情况&#xff0c;需要卖家找出原因并尽快解决。 一…

『Mysql集群』Mysql高可用集群之主从复制 (一)

Mysql主从复制模式 主从复制有一主一从、主主复制、一主多从、多主一从等多种模式. 我们可以根据它们的优缺点选择适合自身企业情况的主从复制模式进行搭建 . 一主一从 主主复制 (互为主从模式): 实现Mysql多活部署 一主多从: 提高整个集群的读能力 多主一从: 提高整个集群的…

vulnhub靶场之digitalworld.local: MERCY v2

一.环境搭建 1.靶场描述 MERCY is a machine dedicated to Offensive Security for the PWK course, and to a great friend of mine who was there to share my sufferance with me. :-) MERCY is a name-play on some aspects of the PWK course. It is NOT a hint for the …

快速排序-加餐

1.快排性能的关键点分析 决定快排性能的关键点是每次单趟排序后&#xff0c;key对数组的分割&#xff0c;如果每次选的key基本都二分居中&#xff0c;那么快排的递归树就是一棵均匀的满二叉树&#xff0c;性能达到最佳。 但是在实践中虽然不可能每次都是二分居中&#xff0c;…

[CTF夺旗赛] CTFshow Web13-14 详细过程保姆级教程~

前言 ​ CTFShow通常是指网络安全领域中的“Capture The Flag”(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、漏洞利用技巧以及解题思路的在线社区或软件。参与者会在比赛中收集“flag”&#xff0c;通常是隐藏在网络环境中的数据或密码形…

面向对象--继承

文章目录 1. 继承概念及定义&#xff1a;继承的定义&#xff1a;继承关系和访问限定符&#xff1a;继承基类成员访问方式的变化 &#xff08;在派生类中访问方式&#xff09; 2. 基类和派生类对象赋值转换3 .继承中的作用域4. 派生类的默认成员函数5. 继承与友元6. 继承与静态成…

《Python爬虫逆向实战》内存漫游

所谓内存漫游&#xff0c;就是说我们可以在浏览器内存中随意检索任何想要的数据。在JS逆向过程中&#xff0c;最麻烦和最浪费时间的步骤就是跟值。本篇文章介绍内存漫游工具能够帮助我们快速定位某个加密值的生成位置&#xff0c;即可以直接搜索变量的值(value)&#xff0c;而不…

【Linux】Linux进程基础

1.进程介绍与概念 进程的本质是在计算机内存中运⾏的程序&#xff0c;但是这⼀个概念太过于⼴泛 每个应用程序运行于现代操作系统之上时&#xff0c;操作系统会提供一种抽象&#xff0c;好像系统上只有这个程序在运行&#xff0c;所有的硬件资源都被这个程序在使用。这种假象…

jenkins 插件Publish Over SSH (sskey) 同步文件夹

一、安装插件 Publish Over SSH SSH Pipeline Steps 二、添加sshkey 将ssh免密登录的私钥新建到 二、准备目录 源&#xff1a;images 目标&#xff1a;/root/images2 流水线脚本 pipeline {agent anystages {stage(Dest) {steps {script{def remote [:]remote.name tstr…

Go 语言应用开发:从入门到实战

Go 语言应用开发&#xff1a;从入门到实战 引言 Go&#xff08;Golang&#xff09;是由 Google 开发的一种开源编程语言&#xff0c;设计初衷是提高编程效率&#xff0c;尤其是在高并发场景下表现出色。Go 语言以其简洁、易学、高效并发的特性&#xff0c;逐渐成为开发者的首…

【LeetCode每日一题】——1588.所有奇数长度子数组的和

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 前缀和 二【题目难度】 简单 三【题目编号】 1588.所有奇数长度子数组的和 …