在 MySQL 中,`_=_` 运算符被称为 __空值安全等于(NULL-safe equal)__ 操作符。它用于比较两个表达式,并且能安全地处理 `NULL` 值的情况。以下是它的核心行为:.md

在 MySQL 中,<=> 运算符被称为 空值安全等于(NULL-safe equal) 操作符。它用于比较两个表达式,并且能安全地处理 NULL 值的情况。以下是它的核心行为:


核心规则:

  1. 当两个值都不是 NULL
    <=> 的行为与 = 相同:

    SELECT 5 <=> 5;    -- 返回 1(TRUE)
    SELECT 5 <=> 6;    -- 返回 0(FALSE)
    
  2. 当至少一个操作数是 NULL
    <=> 返回 0(FALSE),除非两边都是 NULL

    SELECT 5 <=> NULL;    -- 返回 0(FALSE)
    SELECT NULL <=> NULL; -- 返回 1(TRUE)
    
  3. 与普通 = 的对比
    使用 = 比较任何值与 NULL 都会返回 NULL(即未知):

    SELECT 5 = NULL;      -- 返回 NULL
    SELECT NULL = NULL;   -- 返回 NULL
    

典型应用场景:

当你需要直接比较两个可能包含 NULL 的列或值时,使用 <=> 可以避免因 NULL 导致的结果为 UNKNOWN 的问题。

示例:

假设有一个表 users 包含以下数据:

id name email
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

posted @ 2025-06-20 15:38  Dminter  阅读(25)  评论(0)    收藏  举报