本文系统梳理 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 NULL 或 IS NOT NULL。
-- 错误用法:NULL = NULL 返回 NULLSELECT NULL = NULL; -- 结果: NULL-- 正确用法:判断是否为NULLSELECT NULL IS NULL; -- 结果: 1-- 安全等于运算符 (<=>):可比较两个NULL值SELECT NULL <=> NULL; -- 结果: 1关键点:<=> 是 MySQL 特有的“安全等于”运算符,当两个操作数均为 NULL 时返回 1,否则按常规逻辑比较。
第5步:使用范围与集合运算符
在处理范围查询和列表匹配时,BETWEEN、IN 和 LIKE 非常常用。
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步:执行正则表达式匹配
对于复杂的字符串模式匹配,可以使用 REGEXP 或 RLIKE 运算符。
-- 匹配包含 '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 运算符优先级的关键层级(从高到低):
- 最高优先级:
!(逻辑非)、BINARY、COLLATE - 高优先级:
-(负号)、+(正号)、>>、<< - 中优先级:
&*、/、DIV、%、MOD - 低优先级:
-(减法)、+(加法) - 最低优先级:
:=(赋值)


第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 NULL 或 IS NOT NULL 来检查 NULL 值。
问题3:位运算权限判断错误
表现:使用位运算符判断权限时,返回结果错误。
原因:未正确理解二进制位掩码(Mask)的计算方式。
解决方法:确保权限值以 2 的幂次方定义(如 1, 2, 4, 8),并使用 & 运算符进行按位与判断。
总结
MySQL 运算符是数据库查询的核心组成部分。通过熟练掌握算术、比较、逻辑和位运算符,并结合正确的优先级规则,可以编写出高效、准确的 SQL 语句。在实际开发中,建议始终使用括号明确复杂表达式的执行顺序,并特别注意 NULL 值的处理。以上就是 MySQL 运算符的详细内容,更多关于 MySQL 数据库优化的资料请关注本站其它相关文章!
