MySQL中對於NULL值的理解和使用教程

2022-10-06 01:33:09 字數 2838 閱讀 1410

null值的概念是造成sql的新手的混淆的普遍原因,他們經常認為null是和乙個空字串''的一樣的東西。不是這樣的!例如,下列語句是完全不同的:

mysql> insert into my_table (phone) values (null);

mysql> insert into my_table (phone) values ("");

兩個語句把值插入到phone列,但是第乙個插入乙個null值而第二個插入乙個空字串。第乙個的含義可以認為是「**號碼不知道」,而第二個則可意味著「她沒有**」。

在sql中,null值在於任何其他值甚至null值比較時總是假的(false)。包含null的乙個表示式總是產生乙個null值,除非在包含在表示式中的運算子和函式的文件中指出。在下列例子,所有的列返回null:

mysql> select null,1+null,concat('invisible',null);

如果你想要尋找值是null的列,你不能www.cppcns.com使用=null測試。下列語句不返回任何行,因為對任何表示式,expr = null是假的:

mysql> select * from my_table where phone = null;

要想尋找null值,你必須使用is null測試。下例顯示如何找出null**號碼和空的**號碼:

mysql> select * from my_table where phone is null;

mysql> select * from my_table where phone = "";

在mysql中,就像很多其他的sql伺服器一樣,你不能索引可以有null值的列。你必須宣告這樣的列為not null,而且,你不能插入null到索引的列中。

當用load data infile讀取資料時,空列用''更新。如果你想要在乙個列中有null值,你應該在文字檔案中使用\n。字面上的詞'null'也可以在某些情形下使用。

當使用order by時,首先呈現null值。如果你用desc以降序排序,null值最後顯示。當使用group by時,所有的null值被認為是相等的。

為了有助於null的處理,你能使用is null和is not null運算子和ifnull()函式。

mysql的 ifnull() 函式和oracle的 nvl() 函式功能類似。以下簡單舉例:

ifnull(expr1, expr2)

如果expr1不是null,ifnull()返回expr1,否則它返回expr2。ifnull()返回乙個數字或字串值,取決於它被使用的上下文環境。

mysql> select ifnull(1,0);

-> 1

mysql> select ifnull(0,10);

-> 0

mysql> select ifnull(1/0,10);

-> 10

mysql> select ifnull(1/0,'yes');

-> 'yes'

nvl( string1, replace_with)

功能:如果string1為null,則nvl函式返回replace_with的值,否則返回string1的值。

引申一下,此nvl的作用與sqlserver 中的 isnull( string1, replace_with) 一樣。

注意事項:string1和replace_with必須為同一資料型別,除非顯式的使用to_cha程式設計客棧r函式。

例:nvl(to_char(numeric_column), 'some string')

其中numeric_column代指某個數字型別的值。

例:nvl(yanlei777,0) > 0

nvl(yanlei777, 0) 的意思是 如果 yanlei777 是null,則取 0值

null與空值的辨析

來看這樣一段**:

create table `test` (

`col1` varchar( 10 ) character set utf8 collate utf8_general_ci not null ,

`col2` varchar( 10 ) character set utf8 collate utf8_general_ci null

) engine = myisam ;

錯誤(不可以插入null值):

insert into `test` values (null,1);

正確(插入''沒問題):

insert into `test` values ('',1);

insert into `test` values ('', null);

insert into `test` values ('1', '2');

檢索(''不是null,所以not null會把''都算進去):

select * from `test` where col1 is not null

結果:所有三條資料

檢索(正常檢索):

select * from `test` where col1 <> ''

結果:最後一條資料

檢索(<>'',會同時排除''和null的資料,只檢索有內容的資料):

select * from `tes程式設計客棧t` where col2<>''

總結:1. null的儲存不是'',是其它特殊的字元表示。

2. null在檢索<>''的時候,也會被排除,因為沒有真正有意義的內容

3. not null嚴格按照字面意思,''不會被排除。

4. 定義not null的字段,可以插入''

本文標題: mysql中對於null值的理解和使用教程

本文位址: /shujuku/mysql/135654.html

mysql8 null轉0 處理 NULL 值

3.3.4.6 處理 null 值 在你習慣之前,null 值可能會讓你感到驚訝.從概念上講,null 意味著 丟失的未知值 它的處理方法與其他值有些不同.對 null 進行測試,使用 is null 和 is not null 操作符,如下所示 sql mysql select 1 is null...

MySQL中null值問題

今天寫答疑系統的時候,寫了這樣一截 session start db mysqli connect localhost root root qa tname post teacher q select schedule,place from time where tname tname and sn...

對於Python中RawString的理解

1 作用 可以表示 多行注釋 多行字串 其內的單雙引號不轉義 2 r 代表的意思是 raw 3 r 只對其內的反斜槓起作用 注意單個 的問題 raw string 有什麼用處呢?raw string 就是會自動將反斜槓轉義。print n print r n n 注 出現了兩個空行是因為 print...