日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中0和空值_SQL中空值 和NULL的概念:

發布時間:2024/9/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中0和空值_SQL中空值 和NULL的概念: 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在詳細講解null之前,我們先看一個例子

表數據如下:

3306>select * from t1;

+------+-------+

| id | name |

+------+-------+

| 1 | chen |

| 2 | zhang |

| 3 | NULL |

+------+-------+

3 rows in set (0.00 sec)

然后我們想查出所有名字不為'chen'的其它行記錄,我們有可能這樣寫:

3306>select * from t1 where name!='chen';

+------+-------+

| id | name |

+------+-------+

| 2 | zhang |

+------+-------+

1 row in set (0.00 sec)

但是結果好像不太如我們所愿,id為1的那條記錄沒有被查出來,null肯定和'chen'不相等呀,為什么會查不出呢?

NUll值對于新手來說非常容易混淆,經常會被認為null與空字符串''是一樣的,但事實上,這兩者是非常不一樣,NULL表示的是“a missing unknown value”,

而字符串''是一個確定的值,這本質上就已經不一樣了。

舉個例子:

mysql> INSERT INTO t_user (phone) VALUES (NULL); mysql> INSERT INTO t_user (phone) VALUES ('');

第一條insert語句認為這個手機號還不確定是多少,是a missing unknown phone number

第二條代表這個手機號碼是確定的,它的手機號碼為空字符串

為了處理和null相關的比較,在mysql中可以用is null、is not null、<=>(NULL的安全等于,與=相同,但是考慮到了NULL值,與其他值一樣可以進行比較)、

isnull()來測試比較,不能用如=、來和null值比較測試,任何值(包括和null本身)與null對比和函數運算操作結果都為null

如下三個例子可以說明問題:

任何與null的相關操作都為null

3306>SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

+------+--------+--------------------------+

| NULL | 1+NULL | CONCAT('Invisible',NULL) |

+------+--------+--------------------------+

| NULL | NULL | NULL |

+------+--------+--------------------------+

1 row in set (0.00 sec)

3306>SELECT 1>NULL, 1=NULL, 1!=NULL;

+--------+--------+---------+

| 1>NULL | 1=NULL | 1!=NULL |

+--------+--------+---------+

| NULL | NULL | NULL |

+--------+--------+---------+

1 row in set (0.00 sec)

用指定的函數操作才能返回0或1

3306 > SELECT 1 IS NULL, 1 IS NOT NULL, 1<=>NULL,NULL<=>NULL;

+-----------+---------------+----------+-------------+

| 1 IS NULL | 1 IS NOT NULL | 1<=>NULL | NULL<=>NULL |

+-----------+---------------+----------+-------------+

| 0 | 1 | 0 | 1 |

+-----------+---------------+----------+-------------+

1 row in set (0.00 sec)

但是呢,凡事都有個例外:

當用distinct、group by、order by時,此時不同的null值被視為相等計算。

最重要的是,在mysql中,0和null代表假,其它的任何值都代表真

所以回頭看最開始的例子,當我們的where條件為name!='chen'時,它與id=1的行進行比較,即測試:

'chen'!='chen'

這個測試結果為0,為假,所以id=1這一行就不會被查出來。接下來再測試:

'zhang'!='chen'

這個測試結果為1,為真,所以id=2這一行就可以被查出來。接下來再測試:

NULL!='chen'

這個測試結果為NULL,為假,所以id=3這一行就不會被查出來。

所以最終的結果就只有id=2這一行的數據被查出來了。

那如果要達到我們的目地怎么辦?

3306>select * from t1 where name!='chen' or name is null;

+------+-------+

| id | name |

+------+-------+

| 2 | zhang |

| 3 | NULL |

+------+-------+

2 rows in set (0.01 sec)

3306>select * from t1 where ifnull(name,0)!='chen' ;

+------+-------+

| id | name |

+------+-------+

| 2 | zhang |

| 3 | NULL |

+------+-------+

2 rows in set (0.00 sec)

推薦用第一種方法。

因為mysql對了null列的查找是有查詢優化的:

3306>explain select * from test a where a.code='AAAAAA' or a.code is null\G

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: a

type: ref_or_null

possible_keys: code

key: code

key_len: 21

ref: const

rows: 73603

Extra: Using index condition

1 row in set (0.01 sec)

而第二種在列上加上函數的查詢時索引是不起作用的。

其它注意事項

1、用order by ... asc時,null值會被放在最前面,而用order by ... desc時,null時會被放在最后面,相當于null是一個無窮小的值。

2、聚合函數如count(),min(),sum()是忽略null值的。唯一的例外是用count(*),如

SELECT COUNT(*), COUNT(age) FROM person;

如上語句是第一個count(*)是計算person表總行數,而第二個是計算person表age列非null的行數

3、在MyISAM;和InnoDB MEMORY引擎中,是可以在包含null值的列添加索引的,而在其它引擎中則必須聲明為not null才可以添加索引

4、當用load data infile時,空的或者沒有的列將用空字符''代替,如果要導入null值,需要在數據文件里用\N來表示。

5、如果你往timestamp插入null值,則當前時間會被插入,如果一個自增列插入null值,下一個自增值將會被插入。

總結

以上是生活随笔為你收集整理的mysql中0和空值_SQL中空值 和NULL的概念:的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人在线视频免费看 | 久久久久久久久久久久国产 | 亚洲香蕉在线 | 成人免费看片又大又黄 | 91精品人妻一区二区三区蜜桃欧美 | 国产在线播放网站 | 日本丰满熟妇hd | 成人午夜在线播放 | 亚洲精品视频在线免费 | 自拍偷拍第5页 | 色97| 一级黄色片在线观看 | 国产精品第100页 | 奇米影视亚洲春色 | 最新av网址在线观看 | 少妇一级淫片免费放2 | 日批视频在线免费看 | av男女 | 久久久久久免费视频 | 天天操天天干视频 | 啪啪av| 美女脱裤子让男人捅 | 日本日韩欧美 | 欧美大片高清 | av黄色在线看 | 综合久久激情 | 日韩电影在线观看中文字幕 | 最新中文字幕 | 天天爽天天做 | 国产高清在线视频 | 这里只有久久精品 | 顶级尤物极品女神福利视频 | 男人的天堂久久久 | 久久精品一日日躁夜夜躁 | 华人永久免费 | 中文字幕在线看高清电影 | 日本捏奶吃奶的视频 | 日韩精品资源 | 婷婷亚洲一区 | 无套内谢的新婚少妇国语播放 | 日韩欧美精品久久 | 摸大乳喷奶水www视频 | 草草在线视频 | 亚洲欧洲精品一区 | 精品国产理论 | 天堂av资源 | 意大利少妇愉情理伦片 | av观看一区| 亚洲成人av综合 | 亚洲欧美强伦一区二区 | 天天鲁一鲁摸一摸爽一爽 | 91在线日韩 | 少妇又色又爽又高潮极品 | 久久久久久久久久久福利 | 狠狠婷婷| 狠狠伊人| 婷婷五月综合久久中文字幕 | 97超碰资源站 | 亚洲AV第二区国产精品 | 色诱av手机版 | 正在播放老肥熟妇露脸 | 精品久久久久久久无码 | 青草视频免费在线观看 | 黄床大片| 丁香六月久久 | 国产麻豆精品视频 | 中文字幕欧美另类精品亚洲 | 亚洲综合色av | 久久久免费精品视频 | 国产精品久久午夜夜伦鲁鲁 | 日韩视频在线观看免费视频 | 九九国产 | 91毛片在线观看 | 秋霞午夜视频 | 中文字幕2018 | 中文字幕有码视频 | 影音先锋伦理片 | 国产精品99精品无码视亚 | 姐姐av | 日本天堂在线观看 | a猛片 | 大肉大捧一进一出好爽动态图 | 一区二区毛片 | 秋葵视频污 | 国产日韩欧美综合在线 | 四虎国产精品成人免费入口 | 国产一级片免费播放 | 成年人免费在线观看网站 | 亚洲精品嫩草 | 色爱五月天 | 五月天丁香 | 丁香婷婷综合激情 | 麻豆三级视频 | 伦理黄色片| 亚洲精品成a人 | 美女黄18以下禁止观看 | 欧美小视频在线观看 | www.97色| 男生和女生操操 |