MySQL —— 约束

一、概念介绍

MySQL是数据管理的最后一层防线,因此在对数据进行各种操作的时候,我们尽可能的从技术的角度去对用户进行各种合理的约束,使得各种数据的操作尽可能的合理,这就是约束的概念,本篇将整理常见的基本约束,并且介绍其应用场景和使用方法

二、非空约束

在建表时,有一些字段在插入数据时,我们可以根据实际的业务情况,去要求不允许为空,默认情况下,不做任何约束时,字段是允许插入NULL的,因此在建表的时候,可以在不需要为空的字段后面添加not null去约束该字段插入时不允许为空

使用方式:在建表时,字段后面添加not null即可

例子:

三、默认值

当我们插入某个信息时,可能会对部分字段进行省略,当省略时,MySQL会自动采取默认值去插入,这个默认值在建表时若是不设置任何约束,则会自动被设置成NULL,也可以手动的去设置默认值

设置方法:default 默认值

例子:

关于default和not null有一个细节,在默认不做任何约束的情况下,默认值一般为NULL,而若是做了其他的约束,则不会设置默认值,此时,若是省略该字段插入数据,会报没有默认值的错误

四、列描述

列描述的作用相当于一种备注,使用“show create table table_name\G ”可以看到创建表时所添加的备注信息,这是一种软约束,是针对用户在插入数据或者操作数据时,可以根据备注去更加规范操作的一种约束

使用方式:在声明字段后面加上comment '描述信息'

五、zerofill

在定义无符号整形时,会看到后面会默认带上一个(10)

这个(10)的含义是指,该整形占据多少位格子,但默认不显示出来,若是加上zerofill,则若是插入的数字长度不够10,则会自动补0到10个格子位的长度,若是超出则输入什么显示什么,示例:

六、主键 primary key

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个 主键;主键所在的列通常是整数类型,可以认为主键就是用来找到表中某个可以用来标志性区分每一行信息的某个特征,例如学生名单中可以把学号作为主键,这种具有唯一性的标识,根据实际的业务需求,我们可以将具有唯一性、标志性的特质作为主键进行约束,主键也可以设置其自增

自增使用注意事项:

任何一个字段要做自增长,前提是本身是一个索引(key一栏有值

 自增长字段必须是整数

一张表最多只能有一个自增长

使用方式:

1.在字段后面加上 primary key auto_increment(也可以不带自增)

2.在字段后面加上自增(也可以不加)auto_increment,然后再末尾定义完后,再声明主键

primary key(字段名称)

上面的样例是示范只有一列作为主键时,一张表中主键只能有一个,但并不代表主键只能有一列,在有些情况下,可以选择两列甚至多列去作为复合主键,复合主键要从整体上去看唯一性

例子:学生选课系统,我们要求每个学生可以继续多次选择,但是不能重复的去选择同一种课程,而一个课程也可以被不同学生去选择,所以在这个表格中的学生是可以重复出现的,课程也是可以重复出现的,但同一个学生不能多次选择同一个课程,也就是学生和课程的组合,具有唯一性,此时可以用到复合主键进行约束

插入几个值测试一下效果:

七、唯一键 unique

唯一键的作用用来约束一些只能出现一次的特征信息,主键也有唯一性的功能,但主键更多的是强调这个信息的唯一标识,而除了某个特征可以作为唯一标识外,还有很多具有唯一性的特征需要被约束,此时就需要唯一键的约束,设立唯一键的字段具有唯一性,不可重复,也可以让其自增,但注意一个表只能设置一个自增量

使用方式:在字段描述后添加unique

例如上面建立的这个表,约束了qq和电话号是唯一的,而学号作为主键也是唯一的,此时插入重复的qq或者电话就会被拦截

八、外键 foreign key

外键过多是约束表和表之间的链接,在一些复杂关系或者一个较为庞大的系统中,我们往往有不止一个表格,在表格之间也会存在一定的从事关系,外键就是用来约束这种从属关系之间的基本数据逻辑的合理性,这种针对于从表和主表之间的约束就被叫做外键

使用方式:在定义从表时,最后要声明外键约束:

foreign key (字段名称) references 主表名称(主表具有唯一性的字段,最好是主键)

举个例子:每个学生会从属到某个班级中,我们需要对学生信息进行描述和管理,而不同的班级可能会存在各种不同的属性,也需要被描述和管理,因此学生信息表和班级属性表之间可以建立起一种从属关系,避免一些不符合逻辑的信息插入

主表:班级表

从表:学生信息表

非法情况:我们允许学生信息表中,班级信息中出现不存在的班级,也不允许班级表中某个班级被删除前,该班级内还有学生,对这些基本的逻辑错误,通过外键去进行约束拦截

插入数据测试效果:

九、情况模拟

有一个商店的数据,记录客户及购物情况,有以下三个表组成:

商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供应商 provider)

客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证card_id)

购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)

要求:每个表的主外键根据题意设计,客户的姓名不能为空值,邮箱不能重复,客户的性别(男,女)

-- 创建数据库
create database if not exists bit32mall
default character set utf8 ;
-- 选择数据库
use bit32mall;
-- 创建数据库表
-- 商品
create table if not exists goods
(
goods_id int primary key auto_increment comment '商品编号',
goods_name varchar(32) not null comment '商品名称',
unitprice int not null default 0 comment '单价,单位分',
category varchar(12) comment '商品分类',
provider varchar(64) not null comment '供应商名称'
);
-- 客户
create table if not exists customer
(
customer_id int primary key auto_increment comment '客户编号',
name varchar(32) not null comment '客户姓名',
address varchar(256) comment '客户地址',
email varchar(64) unique key comment '电子邮箱',
sex enum('男','女') not null comment '性别',
card_id char(18) unique key comment '身份证'
);
-- 购买
create table if not exists purchase
(
order_id int primary key auto_increment comment '订单号',
customer_id int comment '客户编号',
goods_id int comment '商品编号',
nums int default 0 comment '购买数量',
foreign key (customer_id) references customer(customer_id),
foreign key (goods_id) references goods(goods_id)
);

总结

本章总结了MySQL语句中的各种约束以及使用方式和使用情景

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

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

相关文章

论文解读--Resolving Target Ambiguities in Automotive Radar Using DDMA Techniques

使用DDMA技术解决汽车雷达中的目标模糊 摘要 多普勒分多址(DDMA)是一种慢时相位编码技术,可以使用传统相控阵硬件实现多输入多输出(MIMO)雷达。然而,众所周知,DDMA会在接收到的多普勒频谱中引起模糊。虽然非对称DDMA已经被提出来缓解目标模糊…

基于Vant UI的微信小程序开发(随时更新的写手)

基于Vant UI的微信小程序开发✨ (一)悬浮浮动1、效果图:只要无脑引用样式就可以了2、页面代码3、js代码4、样式代码 (二)底部跳转1、效果图:点击我要发布跳转到发布的页面2、js代码3、页面代码4、app.json代…

SQL注入(sqli-labs第一关)

sqli-labs第一关 方法一:手工注入 来到第一关,图上说我们需要一个数字的参数 于是我们先手工注入?id1 and 11 跟?id1 and 12发现页面没有报错 每张截图上面页面中有select查询语句,这是我在第一关的源码中加上了echo "$sql ";…

Linux下安装mysql8.0(以tar.xz包安装--编译安装)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! Linux下安装mysql8.0(以tar.xz包安装--编译安装)https://myweb.myskillstree.cn/126.html 目录 一、下载对应自己glic版本的MySQL …

VS远程调试

因为是做工厂应用的客制化项目,在客户现场出现异常,本地又很难复现,而且重启软件可能又自动恢复了,此时可以用VisualStudio自带的远程调试功能进行调试,不需要重启软件,能较好的定位问题。客户电脑上不需要…

上位机图像处理和嵌入式模块部署(树莓派4b和电源供给)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面,我们说过pc电脑和嵌入式设备,两者都可以实现相同的软件功能。但是和pc相比较,嵌入式设备不仅价格更便宜&a…

【Java】高效解决 非降序数组合并 两种方法

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! oj:https://leetcode.cn/problems/merge-sorted-array/submissions/ 合并两个有序数组是个经典问题,它不仅在算法学习中频繁出现,也在实际开发中经常遇到。合并数…

「51媒体」邀请媒体参会报道和媒体发稿有啥不同

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体参会报道和媒体发稿是新闻报道的两种不同形式,它们的主要区别在于内容来源、报道方式和目的。 内容来源: 媒体参会报道:通常指的是记者或媒体代…

【配置】IT-Tools部署

github地址 docker运行如下,记得打开云服务器的9090端口 docker run -d --name it-tools --restart unless-stopped -p 9090:80 corentinth/it-tools:latestip:9090查看,很香大部分工具都有

在WHM面板中启用两要素验证

我使用的Hostease的美国独立服务器产品也购买了cPanel面板,但是发现只要获取服务器密码就可以登陆我的cPanel面板,这种给我的感觉不安全,因此联系Hostease的咨询了Hostease技术支持,寻求帮助了解到可以在cPanel面板中开启安全验证…

【ZYNQ】Vivado 封装自定义 IP

在 FPGA 开发设计中,IP 核的使用通常是不可缺少的。FPGA IP 核是指一些已经过验证的、可重用的模块或者组件,可以帮助构建更加复杂的系统。本文主要介绍如何使用 Vivado 创建与封装用户自定义 IP 核,并使用创建的 IP 核进行串口回环测试。 目…

【高阶数据结构】图--最短路径问题

图--最短路径问题 一、单源最短路径--Dijkstra算法1、简介2、解析3、代码4、测试用例5、打印最小路径代码和测试6、缺陷:不能使用负路径 二、单源最短路径--Bellman-Ford算法1、简介2、解析(1)详情i、负权问题:一个点只跑一趟找最…

Git操作GitHub全记录

目录 一. GitHub ssh-key配置二. 添加GitHub仓库Git提交本地代码到Github仓库远程克隆仓库到本地的文件夹再上传本地的无.git的文件夹上传到远程仓库 三. Git删除Github仓库或某个文件或文件夹1.删除已有Github仓库2.删除Github中的某个文件或文件夹①如果没有建立本地库或者克…

力扣例题(循环队列)

链接 . - 力扣(LeetCode) 描述 思路 我们使用数组来创建循环队列 数组的大小我们就额外对开辟一块空间 MyCircularQueue(k) 开辟一个结构体,存放队列的相关数据 分别为size,数组指针_a,起始位置head,结束位置tail 注意:我们…

代码质量检查jacoco环境搭建

这里主要介绍集成和系统测试覆盖率环境搭建,并简单介绍各个工具。 关于单元测试的覆盖率监控(只需要修改ant或maven配置即可),下一篇说明 环境准备 需要环境 jdk1.8centos 7posgresql 9.6 工具下载 jacoco 0.8.2 https://www.eclemma.org/jacoco/ a…

docker01-简介和概述

什么是docker? 我们现在开发项目是在windows操作系统使用idea开发,本地windows操作系统上有我们项目所需的jdk,mysql,redis,tomcat等环境,如果我们想打包我们的项目到一个别的服务器上,在别的服…

大模型面试常考知识点2

文章目录 1. LLM推理attention优化技术KV CachePageAttention显存优化MHA\GQA\MQA优化技术FlashAttention优化技术稀疏Attention1. Atrous Self Attention2. Local Self Attention3. Sparse Self Attention 2. LLM数据处理关键去重多样性保证构造扩充数据充分利用数据 参考文献…

iview(viewUI) span-method 表格实现将指定列的值相同的行合并单元格

效果图是上面这样的&#xff0c;将第一列的名字一样的合并在一起&#xff1b; <template><div class"table-wrap"><Table stripe :columns"columns" :data"data" :span-method"handleSpan"></Table></div&…

Windows Python 安装准备

首先安装配置 1. 环境的安装和配置: 运行环境: 官方提供了cpython解释器 编辑环境: 课程初级阶段:推荐大家使用: 记事本工具(UE、notepad++、editplus、sublime、vscode) 中期阶段IDE的使用,pycharm 2. 安装python环境: 在官方下载python解释器 www.python.org …

AI图书推荐:杀手级ChatGPT提示词——利用人工智能实现成功与盈利

《杀手级ChatGPT提示词——利用人工智能实现成功与盈利》&#xff08;Killer ChatGPT Prompts_ Harness the Power of AI for Success and Profit &#xff09;一书是作者Guy Hart-Davis关于ChatGPT的指南&#xff0c;ChatGPT是OpenAI开发的大语言模型。这本书提供了各种职业角…