1. 程式人生 > 實用技巧 >MYSQL中 != 和 is not的區別

MYSQL中 != 和 is not的區別

id name
1 mike
2 jack
3 null
select name form table where name !='jack';

該語句只能查出第1行,也就是mike;

select name form table where name !='jack' or name is null;

該語句可以查出第1行和第3行,也就是mike和NULL;

總結:也就是說,!= 和=用來判斷具體的值,而NULL需要用is或者is not判斷(只能用is或is not,且like或not like不能判斷)

如果你一定想要使用 != Null來判斷,需要加上這個語句:

set ANSI_NULLS off

這時會發現 is notNULL 和 != null 是等效的。???但是我一直不會設定

  當 SET ANSI_NULLS 為 ON 時,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 語句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 語句仍會返回零行。

  當 SET ANSI_NULLS 為 OFF 時,等於 (=) 和不等於 (<>) 比較運算子不遵守 ISO 標準。使用 WHERE column_name = NULL 的 SELECT 語句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 語句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 語句返回所有不為 XYZ_value 也不為 NULL 的行。

  當 SET ANSI_NULLS 為 ON 時,所有對 null 值的比較均取值為 UNKNOWN。當 SET ANSI_NULLS 為 OFF 時,如果資料值為 NULL,則所有資料對空值的比較將取值為 TRUE。如果未指定 SET ANSI_NULLS,則應用當前資料庫的 ANSI_NULLS 選項設定。有關 ANSI_NULLS 資料庫選項的詳細資訊,請參閱 ALTER DATABASE (Transact-SQL) 和設定資料庫選項。

僅當某個比較運算元是值為 NULL 的變數或文字 NULL 時,SET ANSI_NULLS ON 才會影響比較。如果比較雙方是列或複合表示式,則該設定不會影響比較。


為使指令碼按預期執行,不管 ANSI_NULLS 資料庫選項或 SET ANSI_NULLS 的設定如何,請在可能包含空值的比較中使用 IS NULL 和 IS NOT NULL。


在執行分散式查詢時應將 SET ANSI_NULLS 設定為 ON。

對 計算列或索引檢視建立或更改索引時,SET ANSI_NULLS 也必須為 ON。如果 SET ANSI_NULLS 為 OFF,則針對表(包含計算列或索引檢視的索引)的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。SQL Server 將返回一個錯誤訊息,該錯誤訊息會列出所有違反所需值的 SET 選項。另外,在執行 SELECT 語句時,如果 SET ANSI_NULLS 為 OFF,則 SQL Server 將忽略計算列或檢視的索引值並解析選擇操作,就好像表或檢視沒有這樣的索引一樣。

1、我欄位型別是not null,為什麼我可以插入空值
可以插入‘’,這樣子的空值,但是不能插入null 2、為毛not null的效率比null高 NULL 其實並不是空值,而是要佔用空間,所以mysql在進行比較的時候,NULL 會參與欄位比較,所以對效率有一部分影響,而且B樹索引時不會儲存NULL值的,所以如果索引的欄位可以為NULL,索引的效率會下降很多。 3、判斷欄位不為空的時候,到底要 select * from table where column <> '' 還是要用select * from table where column is not null 呢。
而"null" 表示什麼也不是, 用“=、>、< ...” 所有的判斷,結果都是false,所有隻能用 is null進行判斷。