MySQL 中常用函数使用

news/2025/10/31 20:07:24/文章来源:https://www.cnblogs.com/lgx5/p/19181171

IF函数根据判断条件是否成立进行选择执行,成立时执行一条语句,不成立时执行另一条语句

语法结构:

IF(condition, value_if_true, value_if_false)

参数说明

  • condition: 判断条件
  • value_if_true: 如果 condition 的结果为 TRUE,返回该值
  • value_if_false: 如果 condition 的结果为 FALSE,返回该值

举例:

SELECT id, name,IF(age<18,'未成年','成年') AS '是否成年'
FROM student;

IFNULL()

IFNULL(expr1,expr2),如果 expr1 的值为 null,则返回 expr2 的值,如果 expr1 的值不为null,则返回 expr1 的值。

SELECT   IFNULL(1,0);  -- 输出结果:1   
SELECT   IFNULL(NULL,10); -- 输出结果:10   
SELECT   IFNULL(1/0,10);  -- 输出结果:10   
SELECT   IFNULL(1/0,'yes'); -- 输出结果:'yes' 
SELECT   IFNULL(NULL,'B');    -- 输出结果:B
SELECT   IFNULL('Hello','B'); -- 输出结果:Hello

NULLIF()

NULLIF(expr1,expr2),如果 expr1=expr2 成立,那么返回值为 null,否则返回值为 expr1 的值。

SELECT NULLIF('A','A');     -- 输出结果:null
SELECT NULLIF('A','B');     -- 输出结果:A

ISNULL()

ISNULL(expr),如果 expr 的值为 null,则返回 1,如果 expr1 的值不为 null,则返回 0。

SELECT ISNULL(NULL);        -- 输出结果:1
SELECT ISNULL('HELLO');     -- 输出结果:0

CASE

CASE表示函数开始,END表示函数结束。如果 expr1 成立,则返回 value1,如果 expr2 成立,则返回value2,当全部不成立则返回 valueN,而当有一个成立之后,后面的就不执行了。

SELECT CASE WHEN 1 > 0THEN '1 > 0'WHEN 2 > 0THEN '2 > 0'ELSE '3 > 0'END
#输出结果:1 > 0

如果表达式 expr 的值等于 e1,返回 value1;如果等于 e2,则返回 value2。否则返回 valueN。

SELECT CASE xfflag WHEN 1 THEN '结算账目'WHEN 2 THEN '消费账目'
ELSE '类型不对'

insert into

插入数据:插入数据时数据库会检查主键,如果出现重复会报错。

适用场景:适用于直接数据插入。

# 第一种方式
insert into 表名(字段名1,字段名2,...) values(值1,值2,...);# 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
insert into  表名 values(值1,值2,...);

replace into
插入替换数据:数据表中有 PrimaryKey,或者 unique 索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和 insert into 一样。

适用场景:适用于第一次数据插入时有些字段的数据出现了丢失,再次插入的时候希望通过唯一键更新数据而不再重复插入新数据。

# 第一种方式
replace into 表名(字段名1,字段名2,...) values(值1,值2,...);# 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
replace into 表名 values(值1,值2,...);

insert ignore

插入忽略数据:如果已经存在相同的记录,则忽略当前新数据;

适用场景:适用于数据已经插入,再次插入的时候希望通过唯一键信息,跳过已经插入的数据。

# 第一种方式
insert ignore into 表名(字段名1,字段名2,...) values(值1,值2,...);# 第二种方式:按照表中所有字段进行插入数据,一定要与字段在表中定义的顺序一致
insert ignore into 表名 values(值1,值2,...);

注:对于以上三种方法,如果表中没有设置主键或唯一索引;则效果都是一样的,即直接插入数据

UPSERT
INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。

这个语法适用于在 insert 的时候,如果 insert 的数据会引起唯一索引(包括主键索引)的冲突,即唯一值重复了,则不会执行 insert 操作,而执行后面的 update 操作,使用给定的新值来更新冲突行中的列。

一般 Update子句可以使用 VALUES(col_name) 获取 insert 部分的值。也是项目中使用最多的方式。

注意:VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。

INSERT INTO student(Sno, Sname, Ssex, Sage, Sdept)
VALUES("201215121", "李勇", "", 30, "CS")
on DUPLICATE key UPDATE Sage=values(Sage);
mysql> select * from student;
+-----------+--------+------+------+-------+
| Sno       | Sname  | Ssex | Sage | Sdept |
+-----------+--------+------+------+-------+
| 201215121 | 李勇   | 男   |   18 | CS    |
| 201215122 | 刘晨   | 女   |   19 | CS    |
| 201215123 | 王敏   | 女   |   18 | MA    |
| 201215125 | 张立   | 男   |   19 | IS    |
+-----------+--------+------+------+-------+
4 rows in set (0.00 sec)mysql> INSERT INTO student(Sno, Sname, Ssex, Sage, Sdept)-> VALUES("201215121", "李勇", "", 30, "CS")-> on DUPLICATE key UPDATE Sage=values(Sage);
Query OK, 2 rows affected (0.01 sec)mysql> select * from student;
+-----------+--------+------+------+-------+
| Sno       | Sname  | Ssex | Sage | Sdept |
+-----------+--------+------+------+-------+
| 201215121 | 李勇   | 男   |   30 | CS    |
| 201215122 | 刘晨   | 女   |   19 | CS    |
| 201215123 | 王敏   | 女   |   18 | MA    |
| 201215125 | 张立   | 男   |   19 | IS    |
+-----------+--------+------+------+-------+
4 rows in set (0.00 sec)

 



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

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

相关文章

详细介绍:基于stm32的物联网OneNet火灾报警系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java的实战与思想:从代码到架构的工程之美

Java最大的优势,不仅在于语言本身,更在于它形成了一整套企业级软件工程方法论。无论是传统的单体系统,还是现代的微服务与云原生架构,Java都具备系统化的开发、测试、部署与维护能力。 1. 分层架构(Layered Archi…

revit api创建风管

revit api创建风管public static Duct CreateDuct(Document doc) {ElementId systemTypeId, ductTypeId, levelId;systemTypeId = ductTypeId = levelId = ElementId.InvalidElementId;// 获取标高Idvar levelFilter =…

代码大全2 第四五章

读《代码大全 2》第四、五章,感觉像被老程序员拽着纠正自己的坏毛病,每句话都戳中日常编程的痛点。第四章讲变量命名和数据类型,以前写代码总图懒省事,变量叫个 “temp”“val” 就完事,结果过两天再看,根本记不…

mac | Windows 本地部署 Seata1.7.0,Nacos 作为配置中心、注册中心,MySQL 存储信息 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

程序员修炼之道:从小工到专家读后感1

初闻《程序员修炼之道:从小工到专家》之名,以为是本堆砌进阶技巧的“武功秘籍”。但通读三分之一后豁然开朗,这本书更像一位历经千帆的技术前辈的箴言集,它不教具体语法,而是直指程序员成长的核心——如何建立职业…

代码大全2阅读1

初读《代码大全 2》时,我以为它只是一本罗列编码技巧的工具手册。但通读三分之一后才发现,这本书更像一位资深架构师的经验复盘,将编码从 “技术操作” 升华为 “工程思维”,彻底颠覆了我对 “写好代码” 的认知。…

代码大全2阅读2

通读《代码大全2,书中内容从编码前的准备工作深入到代码构建的核心环节,如循环结构优化、数据类型选择、函数设计原则等,让我对“优质代码”的理解从“可读”延伸到“高效”“可维护”,更深刻体会到编码中的工程思…

软件工程学习日志2025.10.30

在软件开发中,加密算法是保护数据安全的重要手段。不同的加密算法有着不同的特点和应用场景,如何优雅地组织和管理这些算法是一个值得探讨的问题。本文将介绍如何使用工厂方法模式构建一个灵活、可扩展的加密算法系统…

BOE(京东方)“百堂故宫传统文化公益课”暨2025照亮成长路收官 推动“科技+教育+文化”可持续发展

10月31日,BOE(京东方)“百堂故宫传统文化公益课”暨2025照亮成长路收官仪式在故宫博物院隆重举行。故宫博物院作为BOE(京东方)“照亮成长路”公益项目的重要合作伙伴,双方自2023年携手启动“百堂故宫传统文化公益…

Java的深层逻辑与未来生态延伸

Java虚拟机(JVM, Java Virtual Machine)是Java语言的核心所在。它不仅仅是一个“解释器”,更是一个高度优化的执行平台。JVM实现了Java的跨平台能力、内存管理与安全保障,是整个生态运转的基石。 1. JVM的工作流程…

软件工程学习日志2025.10.31

🌱 机器学习日常 | 用朴素贝叶斯挑个好瓜 ——从一道习题到生活化的分类思维 今天复习机器学习时,遇到一道用朴素贝叶斯分类器判断西瓜好坏的题目。样本的特征是:青绿色泽、浊响敲声、稍蜷根蒂、清晰纹理。需要根据…

Java:从跨平台梦想到生态帝国的编程语言

一、Java的诞生与发展历程 Java的故事始于20世纪90年代初。1991年,詹姆斯高斯林(James Gosling)和他的团队在Sun Microsystems公司启动了一个名为“Green”的项目,最初的目标是为家电设备开发一种可移植的编程语言…

MySQL COALESCE 函数使用详解

COALESCE 是 MySQL 中一个非常有用的函数,用于返回参数列表中的第一个非 NULL 值。下面详细介绍它的用法和示例。 基本语法COALESCE(value1, value2, ..., valueN)功能说明函数从左到右依次检查每个参数 返回第一个不…

[KaibaMath]1016 关于数列与其子数列下标不等关系的证明

[KaibaMath]1016 关于数列与其子数列下标不等关系的证明子数列是从原数列中按原顺序任意选取无穷多项组成的新数列。下面给出原数列下标与子数列下标不等关系的证明。

MySQL解析JSON格式字段并取出部分值的方式

在MySQL中,从JSON格式的字段中提取数据可以使用JSON_EXTRACT()函数,或者使用->操作符。 假设你有一个名为mytable的表,其中有一个json_data字段,它的数据类型是JSON,并且包含了一个JSON对象。{"name"…

【详细介绍】一种基于斜二进制的序列树上数据结构

简版。这个文大概是详细地讲讲上面那篇东西里第二种 ds 的原理和实现。不需要读者有太多前置知识。但熟知 BIT 原理将对理解本文有较大帮助。 由于没有查阅到相关资料,本文中的称呼全是作者瞎起的,还请勿要见怪。 作…

drm分析

drm架构是?主要函数有哪些?● DRM(Direct Rendering Manager)是Linux内核中负责管理显卡和GPU的核心子系统,支持硬件加速的2D/3D渲染、显示输出和内存管理。以下是其架构解析和关键函数:DRM核心架构graph LR A[用…

8、认识for循环

学习重点一、for循环的概念 二、for循环的基本格式 三、for循环的基本用法思考题如何打印2行星号,一行50个 ? 写下你的思考: 如何输出20行"hello world"? 写下你的思考:知识点 1、for循环的概念 循环结…

node.js安装搭建

node.js 说明 官网:https://nodejs.org/zh-cn nvm-windows Windows 安装 直接使用 nvm-windows 安装 Node.js:https://github.com/coreybutler/nvm-windows/releases nvm version nvm install latest nvm use 25.1.0…