游乐游手机版
首页/数据库/文章详情

MySQL 运算符详解:算术、比较、逻辑与位运算及优先级

时间:2026-08-31 11:46
本文系统梳理 MySQL 四大核心运算符:算术、比较、逻辑与位运算,涵盖加减乘除、模糊匹配、逻辑判断及二进制操作。重点解析运算符优先级规则,提供关键 SQL 示例与常见陷阱排查,帮助开发者编写高效、准确的数据库查询语句。

本文系统梳理 MySQL 四大核心运算符:算术、比较、逻辑与位运算,涵盖加减乘除、模糊匹配、逻辑判断及二进制操作。重点解析运算符优先级规则,提供关键 SQL 示例与常见陷阱排查,帮助开发者编写高效、准确的数据库查询语句。

MySQL 运算符核心分类与结果预览

在 MySQL 数据库开发中,运算符是构建查询条件、处理数据逻辑的基础。MySQL 主要支持四类运算符:算术运算符用于数值计算,比较运算符用于筛选数据,逻辑运算符用于组合条件,以及位运算符用于底层二进制处理。掌握这些运算符及其优先级,是编写复杂 SQL 语句的关键。

准备工作:环境要求与前置知识

在开始学习运算符之前,请确保您的开发环境满足以下条件:

  • MySQL 数据库:已安装并运行 MySQL 5.7 或更高版本(推荐 8.0+)。
  • 客户端工具:如 MySQL Workbench、Navicat 或命令行终端,用于执行 SQL 语句。
  • 基础 SQL 知识:了解基本的 SELECT 语句结构。

建议创建一个测试数据库和简单的数据表,以便在后续步骤中进行实际操作验证。

第一阶段:掌握算术运算符

第1步:执行基础加减乘除运算

算术运算符用于对数字进行数学计算。MySQL 支持标准的加减乘除以及取余操作。

  • +:加法
  • -:减法
  • *:乘法
  • /DIV:除法(返回浮点数或整数,取决于上下文)
  • %MOD:取余

操作示例:

-- 加法、减法、乘法SELECT 1 + 2, 5 - 3, 4 * 2;-- 除法(注意:MySQL中 / 返回浮点数)SELECT 10 / 3; -- 结果约为 3.3333-- 取余SELECT 10 % 3; -- 结果为 1

完成判断:执行上述语句后,应看到对应的数值结果。注意 /DIV 的区别:/ 通常返回浮点数,而 DIV 返回整数商。

第2步:处理除法中的零值异常

在算术运算中,如果除数为 0,MySQL 不会报错,而是返回 NULL。这在处理动态数据时非常重要。

SELECT 10 / 0; -- 结果: NULLSELECT 10 % 0; -- 结果: NULL

注意:在实际业务逻辑中,需使用 IFNULL()CASE 语句处理 NULL 值,避免影响后续计算。

第二阶段:精通比较运算符

第3步:使用基本比较符筛选数据

比较运算符用于判断两个值的关系,返回 1(真)、0(假)或 NULL。常用符号包括 =(等于)、<>!=(不等于)、>(大于)、<(小于)、>=<=

-- 等于SELECT 2 = 3; -- 结果: 0-- 不等于SELECT 2 <> 3; -- 结果: 1

第4步:处理 NULL 值的特殊比较

MySQL 中 NULL 与任何值(包括另一个 NULL)使用 = 比较时,结果均为 NULL。为了准确判断 NULL 值,必须使用 IS NULLIS NOT NULL

-- 错误用法:NULL = NULL 返回 NULLSELECT NULL = NULL; -- 结果: NULL-- 正确用法:判断是否为NULLSELECT NULL IS NULL; -- 结果: 1-- 安全等于运算符 (<=>):可比较两个NULL值SELECT NULL <=> NULL; -- 结果: 1

关键点:<=> 是 MySQL 特有的“安全等于”运算符,当两个操作数均为 NULL 时返回 1,否则按常规逻辑比较。

第5步:使用范围与集合运算符

在处理范围查询和列表匹配时,BETWEENINLIKE 非常常用。

  • BETWEEN min AND max:包含边界值的范围查询。
  • IN (val1, val2):判断值是否在指定集合中。
  • LIKE:模糊匹配,支持 %(任意字符)和 _(单个字符)。
-- 范围查询SELECT 5 BETWEEN 1 AND 10; -- 结果: 1-- 集合查询SELECT 5 IN (1, 2, 3, 4, 5); -- 结果: 1-- 模糊匹配SELECT '12345' LIKE '12%'; -- 结果: 1 (匹配以12开头的字符串)

第6步:执行正则表达式匹配

对于复杂的字符串模式匹配,可以使用 REGEXPRLIKE 运算符。

-- 匹配包含 'jing' 的字符串SELECT 'beijing' REGEXP 'jing'; -- 结果: 1-- 不匹配SELECT 'beijing' REGEXP 'xi'; -- 结果: 0

第三阶段:应用逻辑运算符

第7步:组合多个条件

逻辑运算符用于连接多个布尔表达式,返回 1(真)或 0(假)。主要运算符包括 AND(与)、OR(或)、NOT(非)和 XOR(异或)。

-- AND:所有条件为真才返回1SELECT 2 AND 0; -- 结果: 0SELECT 2 AND 1; -- 结果: 1-- OR:任一条件为真即返回1SELECT 2 OR 0; -- 结果: 1-- NOT:取反SELECT NOT 1; -- 结果: 0

第8步:理解异或 (XOR) 逻辑

XOR 运算符在两个操作数不同时返回 1,相同时返回 0。这在某些特定业务逻辑(如排除特定组合)中非常有用。

SELECT 1 XOR 0; -- 结果: 1 (不同)SELECT 1 XOR 1; -- 结果: 0 (相同)

第四阶段:掌握位运算符

第9步:执行二进制位操作

位运算符直接在二进制数上进行操作,常用于权限管理、标志位处理等场景。MySQL 支持按位与 (&)、按位或 (|)、按位异或 (^)、取反 (~)、左移 (<<) 和右移 (>>)。

-- 按位与:3 (011) & 5 (101) = 1 (001)SELECT 3 & 5; -- 结果: 1-- 按位或:3 (011) | 5 (101) = 7 (111)SELECT 3 | 5; -- 结果: 7-- 按位异或:3 (011) ^ 5 (101) = 6 (110)SELECT 3 ^ 5; -- 结果: 6

第10步:处理位移与取反

位移运算常用于快速乘除 2 的幂次方。取反运算则是对二进制位进行翻转。

-- 左移:3 (11) << 1 = 6 (110)SELECT 3 << 1; -- 结果: 6-- 右移:3 (11) >> 1 = 1 (01)SELECT 3 >> 1; -- 结果: 1-- 取反:~18446744073709551612 = 3SELECT ~18446744073709551612;

第五阶段:理解运算符优先级

第11步:查阅并应用优先级规则

当 SQL 语句中包含多种运算符时,MySQL 会按照预定义的优先级顺序执行。优先级从高到低排列至关重要,否则可能导致逻辑错误。

以下是 MySQL 运算符优先级的关键层级(从高到低):

  1. 最高优先级!(逻辑非)、BINARYCOLLATE
  2. 高优先级-(负号)、+(正号)、>><<
  3. 中优先级&*/DIV%MOD
  4. 低优先级-(减法)、+(加法)
  5. 最低优先级:=(赋值)

MySQL运算符优先级完整图表,展示了从最高优先级(如!、BINARY)到最低优先级(如:=)的完整层级结构

MySQL运算符优先级完整图表,展示了从最高优先级(如!、BINARY)到最低优先级(如:=)的完整层级结构
MySQL 运算符优先级完整图表,展示了从最高优先级(如!、BINARY)到最低优先级(如:=)的完整层级结构

第12步:使用括号控制执行顺序

当默认优先级不符合业务逻辑时,务必使用圆括号 () 明确指定计算顺序。括号内的表达式将优先执行。

-- 错误示例:可能因优先级导致逻辑错误SELECT * FROM users WHERE age > 18 AND status = 'active' OR role = 'admin';-- 正确示例:使用括号明确逻辑SELECT * FROM users WHERE (age > 18 AND status = 'active') OR role = 'admin';

常见问题与调整建议

问题1:除法结果精度丢失

表现:使用 /DIV 时,结果不符合预期。

原因:/ 返回浮点数,而 DIV 返回整数商。此外,如果操作数是整数,某些版本或设置下可能截断小数。

解决方法:明确使用 CAST() 函数转换数据类型,或使用 / 并配合 ROUND() 函数控制精度。

问题2:NULL 值导致比较失效

表现:使用 = NULL 筛选数据时,结果为空。

原因:MySQL 中 NULL 不等于任何值,包括另一个 NULL

解决方法:始终使用 IS NULLIS NOT NULL 来检查 NULL 值。

问题3:位运算权限判断错误

表现:使用位运算符判断权限时,返回结果错误。

原因:未正确理解二进制位掩码(Mask)的计算方式。

解决方法:确保权限值以 2 的幂次方定义(如 1, 2, 4, 8),并使用 & 运算符进行按位与判断。

总结

MySQL 运算符是数据库查询的核心组成部分。通过熟练掌握算术、比较、逻辑和位运算符,并结合正确的优先级规则,可以编写出高效、准确的 SQL 语句。在实际开发中,建议始终使用括号明确复杂表达式的执行顺序,并特别注意 NULL 值的处理。以上就是 MySQL 运算符的详细内容,更多关于 MySQL 数据库优化的资料请关注本站其它相关文章!

来源:https://www.runoob.com/mysql/mysql-operator.html
上一篇Linux Ubuntu 安装 PostgreSQL 数据库完整教程 下一篇PostgreSQL 教程:核心概念、术语与关键特性详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis Hash 哈希散列:底层原理、存储结构与常用命令详解
数据库 · 2026-08-31

Redis Hash 哈希散列:底层原理、存储结构与常用命令详解

本文详解 Redis Hash 哈希散列的底层存储结构(ziplist 与 dict)、哈希冲突解决机制及常用命令操作。通过图解与实战示例,帮助开发者掌握 Hash 类型在对象存储场景中的高效应用与内存优化策略。

Redis Set 集合详解:底层原理、常用命令与实战示例
数据库 · 2026-08-31

Redis Set 集合详解:底层原理、常用命令与实战示例

本文系统讲解 Redis Set 集合的核心特性与底层存储机制,涵盖 intset 与哈希表的切换条件、结构体定义及内存优化策略。通过完整命令汇总与终端交互示例,帮助开发者掌握集合操作、交集 并集 差集计算及实际应用场景。

Redis连接命令详解:AUTH、PING、SELECT等命令使用指南
数据库 · 2026-08-31

Redis连接命令详解:AUTH、PING、SELECT等命令使用指南

本文详细解析Redis连接命令,包括AUTH、PING、SELECT、ECHO和QUIT等核心命令的语法、参数、返回值及常见错误处理。通过实操示例演示如何建立连接、验证密码、切换数据库及安全断开连接,帮助开发者快速掌握Redis客户端与服务端的交互机制。

Redis PubSub发布订阅模式详解:命令、流程与使用场景
数据库 · 2026-08-31

Redis PubSub发布订阅模式详解:命令、流程与使用场景

Redis PubSub(发布 订阅)是一种基于频道的消息多播机制,适用于实时通知与轻量级解耦场景。本文通过图解与终端交互示例,演示订阅、发布与接收的完整流程,汇总常用命令并说明模式匹配与状态查询方法,帮助开发者快速掌握其使用边界与注意事项。

Redis Stream消息队列:核心概念、命令与实战指南
数据库 · 2026-08-31

Redis Stream消息队列:核心概念、命令与实战指南

Redis 5 0引入的Stream数据类型提供了具备持久化与主从复制能力的消息队列功能。本文系统梳理Stream的核心架构、消息ID生成规则、消费组机制及ACK确认流程,并通过完整的CLI命令示例演示消息的发布、消费与状态管理,帮助开发者快速掌握Redis Stream的实战用法。