SQL:函数以及约束
目录
介绍
函数
字符串函数
数值函数
日期函数
流程函数
约束
总结
介绍
说到函数我们都不陌生,在C,C++,java等语言中都有库函数,我们在平时也是经常使用,函数就是一段代码,我们既可以自定义实现,又可以使用库里内置的函数;从来更加简洁方便的完成业务;同样的在SQL中也有一些内置函数来供我们使用;
函数
函数:一段可以直接别另一段程序调用的程序或代码;
注意:要看到函数的结果要使用select +函数;
字符串函数

1>字符串拼接(concat)
使用语句
select concat("hello ","mysql");
结果:
2>转换为小写(lower)
将字符串中的大写字符转换为小写,原本是小写的不变;
使用语句:
select lower("HellO");
结果: 
3>转换为大写(upper)
使用语句:
select upper("hello");
结果: 
4>使用自定义字符左填充(lpad)
这个函数的参数有三个;分别是填充前的字符串,填充后字符串的长度,填充字符;
注意这里的填充字符可以是一个单个字符,也可以是字符串;
如果是单个字符
使用语句:
select lpad("1",5,'0');
结果:
如果是字符串
使用语句:
select lpad("2",6,'01');
这里我设置的长度为6,只有5个位置可以填充,所以这里是01依次填充,直到填完;
结果:
5>使用自定义字符右填充(rpad)
这里需要注意的是有填充是从最右端依次依次向左填充的:
eg:使用语句:
select rpad("2",6,'01');
结果是201010;
6>去头去尾的空格(trim)
使用语句:
select trim(" Hello , mysql");
结果:
把头部和尾部的空格去掉了;
7>返回指定字符串长度部分(substring)
使用语句:
select substring("abcdefg",1,5);
结果:"abcde";
注意如果没有写len长度的话,就会取起始位置到字符串的末尾;
数值函数

对x向下取整:取小于x的最大整数;
对x向上取整:取大于x的最小整数;
x模y:x/y的余数;
问题:我们如何返回0~10^x之间整数的随机数呢?
我们可以先使用rand生成一个0~1之间的小数,然后乘上10^x,这时候随机数的整数部分是有x位,但是小数部分还需要处理,我们就可以使用round来保留0位小数;这样就得到了0~10^x之间的随机数整数了;
日期函数

这里的日期是年-月-日,time是时-分-秒,now就是年-月-日-时-分-秒;
流程函数
第一个if(value,t,f)与C语言中的三元表达式(value!=0?t:f;)很相似;后面的根据需求了解即可;
约束
概念:约束是作用于表中字段上的限制,用于限制存储在表中的数据;
目的:保证表中数据的正确性,有效性和完整性;

格式:
1.在创建表时,直接写在字段的数据类型后面;
2.在已经创建好的表中的字段中添加约束需要使用关键字alter;具体后面会有;
现在创建一个用户表,并同时加上约束;(一个字段并不是只能有一个约束);
1>主键(primary)和自增(auto_increment)

设置主键后,该字段的数据就要保持完整性(不为空且唯一);这个很好理解,下面来看一下自增性;
现在我向表中插入三个数据,但是我并没有插入id(id的约束是主键自增),虽然我们没有写,但是因为有自增,所以id不为空,而且是唯一的;下面我们来看看表;
自增的作用就是会自动的根据序列递增式的填充;
注意:如果我们插入失败了一个行数据,虽然没有插入成功,但是已经向数据库申请到了空间,下次插入的时候自增约束的字段并不会按照表格中现有的数据挨着填充;
比如:上表中id已经自动填充到3了,如果我插入一行数据失败了,然后我再插入一行数据成功了,那么新插入的一行数据的id就是5,而不是4;
2>检查(check)
这个比较简单,只需要注意格式就可以了,格式与where的格式相同;
3>外键(foreign key (从表字段) reference (主表)(主表字段))
外键:外键是用来让两张表的数据建立联系,从而保证数据的一致性和完整性; 
以这两张表为例,每个员工都有一个所属的部门,部门都有一个id序号,而我们在填员工的部门id时必须得按照部门表中的id来填,也就是员工表中的dept_id的范围约束在了部门表的id取值中,这样就可以保证每个员工的所属部门都是存在的;
现在创建员工表:

在没有使用外键之前,尽管两张表在逻辑上有联系,但是在物理上是没有关系的,也就是说我更改部门表中的id员工表没有任何反应,我在员工表中填一个不存在的一个部门id也不会报错;
1>添加外键

使用语句:
![]()
外键添加后会在字段前出现一个蓝色的小钥匙标志 ;
2>检验是否两个表建立了联系
现在我删除掉部门表中的id为1的部门,在员工表中有好多行的员工在该部门,删除后如果报错了说明两个表之间建立了联系,如果没有报错说明两个表之阿金仍然没有建立物理上的联系;
我删除执行会出现一条报错语句,说明外键发挥了作用;不可以删除或更新主表数据;因为这样会影响到从表的很多数据都需要改变; 下面我们来说说外键的删除和更新行为;
3>删除和更新行为

![]()
1>CASCADE(同步)
如果我把部门表中id为1的数据更改为6,那么员工表中的原来dept_id是1的也会变成6;
如果我如果把部门表中id为1的数据删除,那么员工表中的原来dept_id是1的那一行的数据都会被删除;
2>SET NULL
如果我把部门表中id为1的数据更改为6或者删除,那么员工表中的原来dept_id是1就会全部变成null;
总结
非空约束:NOT NULL
唯一约束:UNIQUE
主键约束:PRIMARY(自增:AUTO_INCREMENT)
默认约束:DEFAULT
检查约束:CHECK
外键约束:FOREIGN KEY
其中最重要的是主键和外键,他们与其他的使用格式不同;要求更严格;
外键的使用使得表与表之间不再是独立的,为以后的多表操作奠定了基础;
相关文章:
SQL:函数以及约束
目录 介绍 函数 字符串函数 数值函数 日期函数 流程函数 约束 总结 介绍 说到函数我们都不陌生,在C,C,java等语言中都有库函数,我们在平时也是经常使用,函数就是一段代码,我们既可以自定义实现,又可以使用库里内置的函数;从来更加简洁方便的完成业务;同样的在SQL中也有…...
在Linux中将设备驱动的地址映射到用户空间
本期主题: MMU的简单介绍,以及如何实现设备地址映射到用户空间 往期链接: Linux内核链表零长度数组的使用inline的作用嵌入式C基础——ARRAY_SIZE使用以及踩坑分析Linux下如何操作寄存器(用户空间、内核空间方法讲解)…...
电脑自带dll修复在哪里,dll丢失的6种解决方法总结
在现代科技日新月异的时代,电脑已经成为我们生活中不可或缺的一部分。然而,在使用电脑的过程中,我们常常会遇到一些常见的问题,其中之一就是dll文件丢失或损坏。当这些dll文件丢失或损坏时,可能会导致某些应用程序无法…...
k8s基于nfs创建storageClass
首先安装nfs #服务端安装 yum install -y nfs-utils rpcbind #客户端安装 yum install -y nfs-utils #启动服务 并设置开启启动 systemctl start rpcbind && systemctl enable rpcbind systemctl start nfs && systemctl enable nfs #创建共享目录 mkdir -p /…...
Chrome无法拖入加载.crx扩展文件(以IDM为例)
问题原因:新版本的Chrome浏览器已不支持加载.crx文件 解决办法:将.crx文件压缩为.zip文件,解压缩后再加载到Chrome中 以IDM的.crx文件作为示例; IDM的.crx文件位于C:\Program Files (x86)\Internet Download Manager; 将IDMGCE…...
数字教学时代:构建高效在线帮助中心的重要性
在数字化教学日益普及的今天,教育领域正经历着前所未有的变革。随着在线课程、虚拟教室、智能学习平台等数字化工具的广泛应用,教育资源的获取方式和学习模式发生了深刻变化。然而,这种变革也带来了新的挑战,其中之一便是如何确保…...
828华为云征文|华为云弹性云服务器FlexusX实例下的Nginx性能测试
本文写的是华为云弹性云服务器FlexusX实例下的Nginx性能测试 目录 一、华为云弹性云服务器FlexusX实例简介二、测试环境三、测试工具四、测试方法五、测试结果 下面是华为云弹性云服务器FlexusX实例下的Nginx性能测试。 一、华为云弹性云服务器FlexusX实例简介 华为云弹性云服…...
知识图谱入门——2:技术体系基本概念:知识表示与建模、知识抽取与挖掘、知识存储与融合、知识推理与检索
知识图谱是通过构建“实体”和“关系”来描述世界的信息网络,它不仅是数据的存储方式,还可以支持推理与查询,帮助系统更好地理解、整合和利用数据。 文章目录 1. 知识表示与建模2. 知识抽取与挖掘3. 知识存储与融合4. 知识推理与检索总结 1.…...
【不看会后悔系列】排序之——文件归并【史上最全详解】~
文章目录 前言一、何为文件归并?二、文件归并思路分析三、创造多数据文件四、前置准备——堆排序五、两个文件写入到第三个文件六、读 N 个数据返回给文件,并返回读到数据的个数七、文件归并八、文件归并完整代码总结1. 运行代码2. 运行截图 总结 前言 学习了归并排…...
安全点的应用场景及其原理详解
引言 在Java虚拟机(JVM)运行的过程中,有些时刻,系统需要暂停所有正在运行的线程,以执行某些全局操作或确保数据的一致性。这些暂停线程的时刻被称为**“安全点”**(Safepoint)。尽管安全点最广…...
计算机各专业2025毕业设计选题推荐【各专业 | 最新】
计算机各专业2025毕业设计选题推荐 Java、Python、Vue、PHP、小程序、安卓、大数据、爬虫、可视化、机器学习、深度学习 文末有联系方式~~~ 1.Java 基于Java的在线购物系统设计与实现Java开发的图书管理系统基于Spring Boot的社交媒体平台Java实现的移动健康应用在线学习平…...
【Python报错已解决】IndexError: index 0 is out of bounds for axis 1 with size 0
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...
SpringGateway(网关)微服务
一.启动nacos 1.查看linux的nacos是否启动 docker ps2.查看是否安装了nacos 前面是你的版本,后面的names是你自己的,我们下面要启动的就是这里的名字。 docker ps -a3.启动nacos并查看是否启动成功 二.创建网关项目 1.创建idea的maven项目 2.向pom.x…...
jQuery面试题:(第三天)
8.你在jQuery中使用过哪些插入节点的方法,它们的区别是什么? 答:append(),appendTo(),prepend(),prependTo(),after(),insertAfter() before(),insertBefore() 内添加 1.append()在文档内添加元素 2.appendTo()把匹配的元素添加到对象里 3.prepend()…...
聊聊国内首台重大技术装备(2)
上次,介绍了《首台(套)重大技术装备推广应用指导目录(2024年版)》中介绍的硅外延炉,湿法清洗机,氧化炉,见文章: 《聊聊国内首台重大技术装备(1)》…...
python 实现rayleigh quotient瑞利商算法
rayleigh quotient瑞利商算法介绍 瑞利商(Rayleigh Quotient)算法在多个领域,如线性代数、计算机视觉和机器学习等,都有重要的应用。瑞利商定义为函数 R ( A , x ) ( x H A x ) / ( x H x ) R(A, x) (x^H Ax) / (x^H x) R(A,x)…...
Java Web应用升级故障案例解析
在一次Java Web应用程序的优化升级过程中,从Tomcat 7.0.109版本升级至8.5.93版本后,尽管在预发布环境中验证无误,但在灰度环境中却发现了一个令人困惑的问题:新日志记录神秘“失踪”。本文深入探讨了这一问题的排查与解决过程&…...
Java类和对象、自定义包、static、代码块、方法重写
目录 1.类和对象 2.this指针 3.对象的构造和初始化 3.1默认初始化 3.2就地初始化 3.3构造初始化 3.4IDEA快速填充 3.5使用this简化 3.6初始化的总结 4.包的引入 4.1包的概念 4.2导入包中的类 4.3自定义包 5.static修饰 6.代码块的划分 7.方法重写 1.类和对象 使…...
【系统代码】招投标采购一体化管理系统,JAVA+vue
前言: 随着互联网和数字技术的不断发展,企业采购管理逐渐走向数字化和智能化。数字化采购平台作为企业采购管理的新模式,能够提高采购效率、降低采购成本、优化供应商合作效率,已成为企业实现效益提升的关键手段。系统获取在文末…...
基于yolov8深度学习的120种犬类检测与识别系统python源码+onnx模型+评估指标曲线+精美GUI界面目标检测狗类检测犬类识别系统
【算法介绍】 基于YOLOv8深度学习的120种犬类检测与识别系统是一款功能强大的工具,该系统利用YOLOv8深度学习框架,通过21583张图片的训练,实现了对120种犬类的精准检测与识别。 该系统基于Python与PyQt5开发,具有简洁的UI界面&a…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
