在 MySQL 中,`_=_` 运算符被称为 __空值安全等于(NULL-safe equal)__ 操作符。它用于比较两个表达式,并且能安全地处理 `NULL` 值的情况。以下是它的核心行为:.md
在 MySQL 中,<=> 运算符被称为 空值安全等于(NULL-safe equal) 操作符。它用于比较两个表达式,并且能安全地处理 NULL 值的情况。以下是它的核心行为:
核心规则:
-
当两个值都不是
NULL时:
<=>的行为与=相同:SELECT 5 <=> 5; -- 返回 1(TRUE) SELECT 5 <=> 6; -- 返回 0(FALSE) -
当至少一个操作数是
NULL时:
<=>返回0(FALSE),除非两边都是NULL:SELECT 5 <=> NULL; -- 返回 0(FALSE) SELECT NULL <=> NULL; -- 返回 1(TRUE) -
与普通
=的对比:
使用=比较任何值与NULL都会返回NULL(即未知):SELECT 5 = NULL; -- 返回 NULL SELECT NULL = NULL; -- 返回 NULL
典型应用场景:
当你需要直接比较两个可能包含 NULL 的列或值时,使用 <=> 可以避免因 NULL 导致的结果为 UNKNOWN 的问题。
示例:
假设有一个表 users 包含以下数据:
| id | name | |
|---|---|---|
| 1 | Alice | alice@example.com |
| 2 | Bob | NULL |
| 3 | Charlie | charlie@example.com |
查询示例:
-- 查找 email 等于 'bob@example.com' 或 email 是 NULL 的用户
SELECT * FROM users WHERE email <=> 'bob@example.com';
-- 结果:无匹配项(因为 Bob 的 email 是 NULL)
-- 查找 email 是 NULL 的用户
SELECT * FROM users WHERE email <=> NULL;
-- 结果:Bob 的记录
-- 普通的 = 运算符无法直接替代:
SELECT * FROM users WHERE email = 'bob@example.com'; -- 不包含 Bob
SELECT * FROM users WHERE email IS NULL; -- 才能匹配 Bob

浙公网安备 33010602011771号