MySQL--》如何在SQL中巧妙运用函数与约束,优化数据处理与验证?

目录

函数使用

字符串函数

数值函数

日期函数

流程函数

约束


函数使用

函数是指一段可以直接被另一段程序调用的程序或代码,在mysql当中有许多常见的内置函数,接下来开始对这些内置函数及其作用进行简单的讲解和使用:

字符串函数

mysql中内置了很多的字符串函数,常见的有如下几个:

函数功能
concat(s1,s2,s3...)字符串拼接,将s1,s2,s3...sn拼接成一个字符串
lower(str)将字符串str全部转为小写
upper(str)将字符串str全部转为大写
lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(str,start,len)返回字符串str从start位置起的len个长度的字符串

接下来对上面的这些字符串函数一一进行一个演示,具体如下所示:

需求案例: 由于业务需求变更,企业员工的工号统一为5位数,目前不足5位数的全部在前面补0,比如1号员工的工号应该为00001,以下面这张员工表为例进行补0:

根据上面这张表想想我们该如何给工号前面补0呢?这里我们用到update函数,直接执行如下命令

update emp set workno = lpad(workno, 5, '0');

数值函数

mysql中内置了很多的数值函数,常见的有如下几个:

函数功能
ceil(x)向上取整
floor(x)向下取整
mod(x,y)返回x/y的模
rand()返回0~1内的随机数
round(x,y)求参数x的四舍五入的值,保留y位小数

接下来对上面的这些字符串函数一一进行一个演示,具体如下所示:

需求案例:通过数据库的函数,生成一个六位数的随机验证码,这个时候应该第一时间想到数值函数当中的生成随机数,但是其生成的是小数,如何操作呢?请往下看:

这里我们就借助数值函数的随机数,四舍五入以及左填充的方式实现,语句如下:

-- 生成六位随机数,包含小数
select rand()*1000000;
-- 生成六位随机数, 进行四舍五入保留0位小数
select round(rand()*1000000, 0);-- 生成六位随机数,可以出现小于6位的情况,如0.0012312,不足6位前面补0
select lpad(round(rand()*1000000, 0), 6, '0');

日期函数

mysql中内置了很多的日期函数,常见的有如下几个:

函数功能
curdate()返回当前日期
curtime()返回当前时间
now()返回当前日期和时间
year(date)获取指定date的年份
month(date)获取指定date的月份
day(date)获取指定date的日期
date_add(date, interval, expr type)返回应该日期/时间加上一个时间间隔expr后的时间值
datediff(date1, date2)返回起始时间date1和结束时间date2之间的天数

接下来对上面的这些日期函数一一进行一个演示,具体如下所示:

需求案例:查询所有员工的入职天数并根据入职天数倒序排序,这里我们使用如下这张表进行演示讲解:

想想应该怎么做呢?这里直接获取表中所有的员工姓名,其入职天数等于当前时间和入职时间的间隔,然后再以这个间隔进行降序排序即可,语句如下:

select name, datediff(curdate(), entrydate) as 'entryDays' from emp order by entryDays desc;

流程函数

流程函数也是很常用的一类函数,可以在sql语句中实现条件筛选从而提高语句的效率,常见语句如下:

函数功能
if(value, t, f)如果value为true,则返回t,否则返回f
ifnull(value1, value2)如果value1不为空,则返回value1,否则返回value2
case when [val1] then [res1]...else [default] end如果val1为true,则返回res1,...,否则返回default默认值
case [expr] when [val1] then [res1]...else [default] end如果expr值为val1则返回res1,...否则返回default默认值

接下来对上面的这些流程函数一一进行一个演示,首先这里先演示一下if语句,具体如下所示: 

接下来我们要实现对员工表当中的工作地址进行筛选,如果工作地址是北京/上海等地返回一线城市,否则返回二线城市,具体如下所示:

需求案例:根据一张学生表的语数外成绩,分别设置优秀、及格、不及格三种情况,如下:

我们先创建一张学生表,想想如何创建表并赋值数据呢?直接看如下语句:

create table students (id int comment '学号',name varchar(20) comment '姓名',chinese int comment '语文成绩',math int comment '数学成绩',english int comment '英语成绩'
) comment '学生表';
insert into students values (1, '张三', 80, 90, 75), (2, '李四', 15, 80, 90), (3, '王五', 70, 65, 40);

接下来我们开始对这张学生表的成绩进行分类,大于85优秀、大于60及格、小于60不及格:

约束

约束是作用于表中字段上的规则,用于限制存储在表中的数据的,是为了保证数据库中数据的正确、有效性和完整性,对于约束的分类主要分为以下几种:

约束描述关键字
非空约束限制字段的数据不能为nullnot null
唯一约束保证字段的所有数据唯一、不重复unique
主键约束主键是一行数据的唯一标识,要求非空且唯一primary key
默认约束保存数据如果未指定该字段的值则采用默认值default
检查约束(8.0.16版本之后)保证字段值满足某一条件check
外键约束用来让两张表之间的数据建立连接,保证数据的一致性和完整性forelgn key

如下我们可以根据下面这张表的需求完成表的结构创建:

这里我们直接执行如下命令并往表中插入一些数据:

-- 创建表
create table user (id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check ( age > 0 && age < 120 ) comment '年龄',status char(1) default '1' comment '状态',gender char(1) comment '性别'
) comment '用户表';
-- 插入数据
insert into user (name, age, status, gender) values ('张三', 20, '1', '男'), ('李四', 30, '1', '女' );
insert into user (name, age, status, gender) values ('王五', 40, '2', '男');

如下生成的表中自动生成主键并递增,大家可以尝试输入错误的年龄,重复的姓名试一试,数据库都是创建数据失败的:

当然我们也可以借助图形化工具datagrip,直接新建表格然后设置约束,如下所示:

外键约束:外键是用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性,如下可以通过员工表的dept_id字段与部门表建立连接:

在主外键关系当中我们把部门表称为父表(外键所关联的表称为父表),员工表称为子表(具有外键的表称为子表),当然有时候我们也可以将其称为主表和从表,目前下面这两张表在数据库层面并未建立外键关联,所以是无法保证数据的一致性和完整性的:

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

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

相关文章

归有光,情感与真实的独行者

归有光&#xff0c;字熙甫&#xff0c;号震川&#xff0c;生于明孝宗弘治十年&#xff08;公元1507年&#xff09;&#xff0c;卒于明穆宗隆庆五年&#xff08;公元1571年&#xff09;&#xff0c;享年64岁。他是中国明代著名的散文家、文学家和史学家&#xff0c;其散文风格清…

计算机网络-Wireshark探索ARP

使用工具 Wiresharkarp: To inspect and clear the cache used by the ARP protocol on your computer.curl(MacOS)ifconfig(MacOS or Linux): to inspect the state of your computer’s network interface.route/netstat: To inspect the routes used by your computer.Brows…

Vue3小兔鲜电商项目

创建项目 npm install 装包

美畅物联丨视频接入网关如何配置 HTTPS 证书

在安防领域&#xff0c;视频接入网关&#xff08;Video Access Gateway&#xff0c;VAG&#xff09;是视频监控系统的重要组成部分&#xff0c;其职责是把视频数据从前端设备传输至后端服务器。配置HTTPS证书后&#xff0c;可对视频流进行加密传输&#xff0c;避免数据在网络传…

fastcam编程套料软件

Fastcam是一款功能强大的专业软件&#xff0c;以下是对它的具体介绍&#xff1a; 基本信息 • Fastcam自1982年推出首个交互式CNC编程和套料系统后&#xff0c;一直不断更新发展. • 它是为数控火焰、等离子、激光和水射流切割机等数控切割机开发的编程套料软件. 主要功能模…

【大语言模型】LangChain ModelsIO与Models I/O Promopts详解

【大语言模型】LangChain ModelsIO与Prompts详解 一、LangChain ModelsIO1、简介2、Models I/O 的应用场景3、Models I/O 主要模块3.1、Prompts3.2、Modelsa、MESSAGES 类型 3.3、Output Parsers 二、LangChain ModelsIO Prompts1、简介2、Prompts 的优点3、实战示例3.1、Promp…

MicroBlaze软核开发(三):DDR + FLASH

实现功能&#xff1a;使用 MicroBlaze软核&#xff0c;配置 DDR、Flash 接口&#xff0c;并将程序烧写固化到Flash&#xff0c;每次启动 FPGA 时自动运行 Flash 中的程序 。 Vivado版本&#xff1a;2018.3 FPGA&#xff1a;Xilinx Artix-7 系 目录 引言 Vivado部分&#xff1…

11.23[大数据]

PRO1:LSTM模型预测输出都是同一个值&#xff1f; 画出来的图像就是一条横线 这个搜了搜&#xff0c;原因可能有很多&#xff0c;但感觉最主要的原因极可能是激活函数选择不当&#xff0c;以及层的搭建不合适 原模型是 REF https://zhuanlan.zhihu.com/p/654325094 https:/…

基于SpringBoot+Vue的新闻管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展&#xff0c;信息传播速度不断加快&#xff0c;新闻媒体行业面临着巨大的机遇与挑战。传统的新闻媒体正在逐渐向数字化转型&#xff0c;而新闻管理系统作为数字化新闻媒体的核心组成部分&#xff0c;其…

【C语言】完成程序设计填空

文章目录 1、请阅读下面的程序,在空白处填写正确的代码,要求各在一行从头开始输出m和n的值。2、求100~599之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。3、以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序 拆分并输出。请填空…

MySQL-DDL之数据表操作

文章目录 一. 表的创建1. 表的创建2. 栗子 二. 查看表1. 查看数据库中的所有表2. 查看表结构 三. 删除表1. 删除表 四. 修改表结构1. 添加字段2. 修改字段3. 删除字段4. 修改表名 数据定义语言&#xff1a;简称DDL(Data Definition Language) 一. 表的创建 1. 表的创建 格式&…

【开源安全保护】如何安装JumpServer堡垒机

【开源安全保护】如何安装JumpServer堡垒机 什么是堡垒机 大家好&#xff0c;我是星哥&#xff0c;今天我以前来认识堡垒机 堡垒机&#xff08;Bastion Host&#xff09;&#xff0c;也称为跳板机&#xff08;Jump Server&#xff09;&#xff0c;是指在计算机网络中&#x…

【经典论文阅读】DDPM(Diffusion)

DDPM&#xff08;Diffusion&#xff09; denoising diffusion probabilistic models 【生成模型】DDPM概率扩散模型&#xff08;原理代码)-CSDN博客 【DDPM】一文看懂去噪扩散概率模型&#xff0c;公式讲解、代码实现与最全详解&#xff08;一&#xff09;-CSDN博客 【DDPM】…

重拾Java:穿越最具多功能性的编程语言之旅

你知道Java是世界上最广泛使用的编程语言之一吗&#xff1f;无论是用于Web应用、企业系统&#xff0c;还是Android开发&#xff0c;Java始终是各级开发者的可靠选择。 在完成SESI SENAI的系统开发技术培训后&#xff0c;我决定重新学习这门语言。现在&#xff0c;我将其与我正…

MySQL--用户权限

1.使用root用户登录MySQL客户端&#xff0c;创建一个名为userl的用户&#xff0c;初始密码为123456;创建一个名为user2的用户&#xff0c;无初始密码。然后&#xff0c;分别使用uesr1、user2登录MySQL 客户端。 创建两个用户 使用user1登录 使用user2登录 2.使用root用户登录&a…

LabVIEW断路器检测系统

随着电网技术的快速发展&#xff0c;对电力系统的可靠性和安全性要求不断提高&#xff0c;塑壳断路器作为关键的保护设备&#xff0c;其出厂前的检测非常重要。开发了一种基于LabVIEW软件平台开发的塑壳断路器智能脱扣器检测系统&#xff0c;该系统能够有效提高检测的自动化水平…

Python实现Excel中数据条显示

Python中要实现百分比数据条的显示&#xff0c;可以使用pandas库&#xff0c;pandas图表样式的设置与Excel中的条件格式设置比较类似&#xff0c;比如Excel里常用的数据条的用法&#xff0c;在pandas中使用代码进行高亮显示&#xff0c;用来突出重点数据&#xff0c;下面一起来…

使用Vue3+Echarts实现加载中国地图,点击省份地图下钻(完整教程)

一. 前言 在众多 ECharts 图表类型中&#xff0c;开发者始终绕不开的有各种各样的地图开发&#xff0c;关于地图开发&#xff0c;可能比其他图表相对繁琐一些&#xff0c;其实说简单也简单&#xff0c;说复杂也复杂&#xff0c;其中不乏有层级地图、3D 地图等&#xff0c;感觉…

【机器学习】——windows下安装anaconda并在vscode上进行配置

一、安装anaconda 1.进入清华的镜像网站&#xff0c;下载自己电脑对应的anaconda版本。网站&#xff1a;https://repo.anaconda.com/archive/ 这里我下载的版本是anaconda3-2024.10-1-Windows-x86-64 2.下载完毕后开始安装anaconda 3.配置anaconda环境变量 在设置中找到编…

总结FastDFS的面试题

目录 一&#xff1a;FastDFS的基础知识 1&#xff1a;定义 2&#xff1a;FastDFS的优点 3&#xff1a;tracker server 4&#xff1a;storage server 二&#xff1a;FastDFS的存储原理 1&#xff1a;小文件存储的问题 2&#xff1a;小文件合并存储 3&#xff1a;文件上…