在 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号
浙公网安备 33010602011771号