MySQL学习(二)——MySQL内置函数

news2024/12/26 22:44:21

文章目录

  • 1. 函数
    • 1.1 字符串函数
    • 1.2 数值函数
    • 1.3 日期函数
    • 1.4 流程函数
  • 2. 约束
    • 2.1 概述
    • 2.2 外键约束
      • 2.2.1 外键使用
      • 2.2.2 删除/更新行为

1. 函数

和其他编程语言一样,MySQL也有函数的定义。函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着,这一段程序或代码在MySQL中已经给我们提供了,我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。这里的函数既指MySQL中内置的函数,也指自己定义的函数。

MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。

1.1 字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

函数功能
CONCAT(S1,S2,...,Sn)字符串拼接,将S1,S2,... Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串padstr的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串padstr的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回从字符串strstart位置起的len个长度的字符串,MySQL中索引从1 开始

演示如下:

# concat : 字符串拼接
select concat('Hello', ' MySQL');

# lower : 全部转小写
select lower('Hello');

# lpad : 左填充
select lpad('01', 5, '-');

# trim : 去除空格
select trim(' Hello MySQL ');

# substring : 截取子字符串
select substring('Hello MySQL',1,5);

1.2 数值函数

常见的数值函数如下:

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数

演示如下:

# ceil:向上取整
select ceil(1.1);

# mod:取模
select mod(7,4);

# rand:获取随机数
select rand();

# round:四舍五入
select round(2.344,2);

1.3 日期函数

常见的日期函数如下:

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回起始时间date1 和 结束时间date2之间的天数

演示如下:

# curdate:当前日期
select curdate();

# curtime:当前时间
select curtime();

# YEAR , MONTH , DAY:当前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());

# now:当前日期和时间
select now();

# date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );

# datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01');

1.4 流程函数

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

函数功能
IF(value , t , f)如果valuetrue,则返回t,否则返回f
IFNULL(value1 , value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END如果val1true,返回res1,… 否则返回default默认值
CASE [ expr ] WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END如果expr的值等于val1,返回res1,… 否则返回default默认值

演示如下:

# if
select if(false, 'Ok', 'Error');

# ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');

# case when then else end
# 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)
select
	name,
	( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end ) as '工作地址'
from emp;

2. 约束

2.1 概述

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

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

**注意:**约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

2.2 外键约束

2.2.1 外键使用

外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

外键约束示例如下,加入我们有两张表,员工表和部门表。左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工的信息中存储的是部门的ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。

在这里插入图片描述

对外键操作的语法如下。

  • 创建表时添加

    CREATE TABLE 表名(
    	字段名 数据类型,
    	...
    	[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
    );
    
  • 创建表后添加

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;
    
  • 删除外键

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    

代码演示如下:

# 为emp表的dept_id字段添加外键约束,关联dept表的主键id
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

# 删除emp表的外键fk_emp_dept_id
alter table emp drop foreign key fk_emp_dept_id;

2.2.2 删除/更新行为

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 NO ACTION 一致) 默认行为
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值 (Innodb引擎不支持)

默认的外键删除/更新行为是 NO ACTION ,如果想要有其他的行为,那么其语法为:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

语法演示如下:

# CASCADE
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references 
dept(id) on update cascade on delete cascade ;

# SET NULL
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update set null on delete set null ;

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

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

相关文章

jmeter接口测试实战:接口加密、接口解密、签名sign接口实战详解

在接口测试中,签名(sign)是一种重要的加密方式,用于保障数据传输的安全性和完整性。在这篇文章中,我们将通过一个具体的案例来学习如何使用 JMeter 进行签名接口的测试,并用 Python 代码进行实战演示。 比…

集成友盟qq互联分享,导出风险问题处理

处理方案:移除 android:exported"true"即可。 注意友盟SDK QQ share 里默认配置是android:exported"true",所以要覆盖即可。

为什么CDN能创造这么利益

互联网的快速发展带来了更多的在线内容和应用,但同时也引发了对网站性能的高要求。用户对快速加载的期望越来越高,这就需要采用高效的内容分发解决方案。在这方面,CDN(内容分发网络)扮演了关键角色,通过其分…

uniapp(uncloud) 使用生态开发接口详情2(使用 schema创建数据, schema2code创建页面, iconfont 引入项目)

上一篇介绍如何创建项目,接下来该是如何使用 在项目中pages 目录下,新建界面 项目运行,浏览器中用账号密码登录, 新建一级和二级页面 2.1 系统管理 > 菜单管理 (新增一级界面) 2.2 找到刚刚创建的菜单, 操作行有 子菜单(点击) 用DB Schema创建页面, 3.1 在uniCloud > d…

大规模语言模型人类反馈对齐--RLHF

大规模语言模型在进行监督微调后, 模型具备了遵循指令和多轮对话的能力, 具备了初步与用户进行对话 的能力。然而, 大规模语言模由于庞大的参数量和训练语料, 其复杂性往往难以理解和预测。当这些模型被部署 时, 它们可…

经济不景气时,企业如何通过反向竞价节省成本?

在经济不景气时期,企业往往被迫寻找创新方法来削减成本,争取提高盈利。其中一种越来越受欢迎的方法就是使用反向竞价。 反向竞价是一种采购策略,它颠覆了传统的采购流程,允许供应商竞争买方的业务。这种方法可以节省大量成本&…

退税政策线上VR互动科普展厅为税收工作带来了强大活力

缴税纳税是每个公民应尽的义务和责任,由于很多人缺乏专业的缴税纳税操作专业知识和经验,因此为了提高大家的缴税纳税办事效率和好感度,越来越多地区税务局开始引进VR虚拟现实、web3d开发和多媒体等技术手段,基于线上为广大公民提供…

C# Winform编程(2)常用控件

C# Winform编程(2)常用控件 常用控件 常用控件 标签,文本,按钮,列表框,组合框等的使用 Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks…

Python-pyecharts和pandas库

目录 pyecharts库 pandas库 示例1 示例2 pyecharts库 pyecharts是一个基于Python的交互式数据可视化库,旨在帮助用户轻松地创建各种类型的图表和可视化效果。该库是在Echarts开源项目的基础上开发的,Echarts是一款由百度开发的优秀的数据可视化工具。…

静力触探数据智能预处理(3)

静力触探数据智能预处理(3) 前言 将钻探、物探、静力触探三种数据放在一起对比分析,三种方法间存在尚不明确的物性联系。利用某规范进行土的分类,得出了全是砂土的错误结论,非专业编写,仅供参考。 1、对…

Xilinx IP 10G Ethernet PCS/PMA IP Core

Vivado 10G Ethernet PCS/PMA介绍 1介绍 完整的10G以太网接口如下图,分为10G PHY和10G MAC两部分。 这篇文章重点讲 10G Ethernet PCS/PMA。 2 IP的基本介绍 10G以太网物理编码子层/物理介质连接(PCS/PMA)核心在Xilinx 10G以太网介质访问控制器(MAC)核心和具有10Gb/s…

并发数的计算

一 常用平均并发数计算公式 1.1 普通计算方法 计算公式: TPS总请求数/总时间按照需求所示,第32周有4.13万的浏览量,那么总请求数估算为4.13万 总请求数4.13完请求数41300请求数 总时间1天24小时24*3600秒 TPS41300请求数/24*3600秒0.48请求数…

2.1 初探大数据

文章目录 零、学习目标一、导入新课二、新课讲解(一)什么是大数据(二)大数据的特征1、Volume - 数据量大2、Variety - 数据多样3、Velocity - 数据增速快4、Value - 数据价值低5、Veracity - 数据真实性 (三&#xff0…

Cpolar和极简主义文件管理器:为用户提供高效稳定的个人云存储服务

文章目录 1. 前言2.Tiny File Manager网站搭建2.1.Tiny file manager下载和安装2.2 Tiny file manager网页测试2.2 Tiny file manager网页测试3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试总结 1. 前言 文件共享和查阅是现在网络最常见的应用场景&am…

基于ssm的图书商城

功能如下图所示 摘要 今天,我们生活在一个充满活力的时代,其中网购已经成为一种主要购物方式。传统实体书店的客流量日益减少,而实体书籍的销售量也逐年下滑,这不可避免地导致了在线图书商城的崛起。在线商城具有众多优势。首先&a…

谷歌、AMD、英特尔加入挑战,英伟达AI解决方案还能继续“遥遥领先”吗?

夕小瑶科技说 原创 编译 | 谢年年 要问世界范围内人工智能解决方案谁最“遥遥领先”? 那肯定是英伟达! 然鹅这一情况很有可能会发生变动。 谷歌正在构建自己的人工智能基础设施! 除了谷歌,在软件方面,Meta的PyTor…

华为云云耀云服务器L实例评测|CentOS系统盘迁移到数据盘教程讲解

华为云云耀云服务器L实例评测|CentOS系统盘迁移到数据盘教程讲解 在华为云网购买华为云云耀云服务器L实例的Centos系统机器,可能会出现没有在挂载数据盘直接安装在系统盘情况,又或者系统初始化自动挂载在其他目录上。建议大家都把数据存放在数据盘下 …

CICD:Circle CI 实现CICD

持续集成解决什么问题 提高软件质量效率迭代便捷部署快速交付、便于管理 持续集成(CI) 集成,就是一些孤立的事物或元素通过某种方式集中在一起,产生联系,从而构建一个有机整体的过程。 持续,就是指长期…

如何养好一个微信新号?

最近听到一句话,“微信是个完整的互联网”。 你还真别说,真是。如果你还觉得微信只是个聊天视频打电话的工具,那可就有信息差了。 微信有各种各样的小程序,有打车的,有交话费的,有游戏,可以说&a…

【leetcode】260.只出现一次的数字Ⅲ

思路 由于只能使用线性时间复杂度。所以 遍历数组&#xff0c;将每个数字出现的次数存储到字典map中遍历字典&#xff0c;将次数为1的数字取出&#xff0c;就是答案 代码 #include<iostream> #include<vector> using namespace std; #include<map>class …