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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql两个字段相减_MySQL 中NULL和空值的区别?

發(fā)布時間:2023/12/3 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql两个字段相减_MySQL 中NULL和空值的区别? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作為后臺開發(fā),在日常工作中如果要接觸Mysql數(shù)據(jù)庫,那么不可避免會遇到Mysql中的NULL和空值。那你知道它們有什么區(qū)別嗎?

學不動了,也不想知道它們有什么區(qū)別。大兄弟,不行啊,要面試!

前些天我的好朋友小木去應聘工作,他面試完回來和我聊天回味了一道他的面試題。

面試官:你有用過MySQL嗎?

小木:有!

面試官:那你能大概說一下Mysql中 NULL值和空值的區(qū)別嗎?

小木:(思考…)NULL和空值都用過,你要我說它兩有啥區(qū)別,這個我還真沒仔細想過,反正實際開發(fā)中會用!

聽了小木的這個回答。

我說:你這樣回答肯定是不妥的,這個問題你是必掛了。

小木說: NULL翻譯過來不就是空嗎?我是真的沒有仔細想過,這個還是挺迷惑人的。

為了其他的伙伴在遇到這個問題的時候不要像我的好友小木一樣在此處跌倒,錯過心儀的公司,下面簡單整理聊聊這兩者的一些區(qū)別和使用。

02 NULL和空值

NULL也就是在字段中存儲NULL值,空值也就是字段中存儲空字符(’’)。

1、占用空間區(qū)別

mysql> select length(NULL), length(''), length('1');

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

| length(NULL) | length('') | length('1') |

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

| NULL | 0 | 1 |

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

1 row in set

小總結:從上面看出空值(’’)的長度是0,是不占用空間的;而的NULL長度是NULL,其實它是占用空間的,看下面說明。

NULL columns require additional space in the row to record whether their values are NULL.

NULL列需要行中的額外空間來記錄它們的值是否為NULL。

通俗的講:空值就像是一個真空轉態(tài)杯子,什么都沒有,而NULL值就是一個裝滿空氣的杯子,雖然看起來都是一樣的,但是有著本質的區(qū)別。

2、插入/查詢方式區(qū)別

創(chuàng)建一個表,tb_test

CREATE TABLE `tb_test` (

`one` varchar(10) NOT NULL,

`two` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入進行驗證:

-- 全部插入 NULL,失敗

mysql> INSERT tb_test VALUES (NULL,NULL);

1048 - Column 'one' cannot be null

-- 全部插入 空值,成功

mysql> INSERT tb_test VALUES ('','');

Query OK, 1 row affected

模擬數(shù)據(jù):

INSERT tb_test VALUES (1,NULL);

INSERT tb_test VALUES ('',2);

INSERT tb_test VALUES (3,3);

空值字段:

-- 使用 is null/is not null

mysql> SELECT * FROM tb_test where one is NULL;

Empty set

mysql> SELECT * FROM tb_test where one is not NULL;

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

| one | two |

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

| 1 | NULL |

| | 2 |

| 3 | 3 |

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

3 rows in set

-- 使用 = 、!=

mysql> SELECT * FROM tb_test where one = '';

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

| one | two |

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

| | 2 |

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

1 row in set

mysql> SELECT * FROM tb_test where one != '';

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

| one | two |

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

| 1 | NULL |

| 3 | 3 |

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

2 rows in set

NULL值字段:

-- 使用 is null/is not null

mysql> SELECT * FROM tb_test where two is not NULL;

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

| one | two |

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

| | 2 |

| 3 | 3 |

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

2 rows in set

mysql> SELECT * FROM tb_test where two is NULL;

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

| one | two |

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

| 1 | NULL |

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

1 row in set

-- 使用 = 、!=

mysql> SELECT * FROM tb_test where two = '';

Empty set

mysql> SELECT * FROM tb_test where two != '';

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

| one | two |

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

| | 2 |

| 3 | 3 |

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

2 rows in set

小總結:如果要單純查NULL值列,則使用 is NULL去查,單純去查空值(’’)列,則使用 =''。

建議查詢方式:NULL值查詢使用is null/is not null查詢,而空值(’’)可以使用=或者!=、等算術運算符。

3、COUNT 和 IFNULL函數(shù)

使用COUNT函數(shù):

mysql> SELECT count(one) FROM tb_test;

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

| count(one) |

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

| 3 |

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

1 row in set

mysql> SELECT count(two) FROM tb_test;

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

| count(two) |

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

| 2 |

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

1 row in set

mysql> SELECT count(*) FROM tb_test;

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

| count(*) |

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

| 3 |

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

1 row in set

使用IFNULL函數(shù):

mysql> SELECT IFNULL(one,111111111) from tb_test WHERE one = '';

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

| IFNULL(one,111111111) |

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

| |

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

1 row in set

mysql> SELECT IFNULL(two,11111111) from tb_test where two is NULL;

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

| IFNULL(two,11111111) |

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

| 11111111 |

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

1 row in set

小總結:使用 COUNT(字段) 統(tǒng)計會過濾掉 NULL 值,但是不會過濾掉空值。

說明:IFNULL有兩個參數(shù)。 如果第一個參數(shù)字段不是NULL,則返回第一個字段的值。 否則,IFNULL函數(shù)返回第二個參數(shù)的值(默認值)。

4、索引字段說明

看到網(wǎng)上有一些人說: MySql中如果某一列中含有NULL,那么包含該列的索引就無效了。

給one 和two 字段分別加上普通索引。之前有寫過,在復習添加索引:Mysql索引整理總結

-- ALTER TABLE table_name ADD INDEX index_name(col_name);

ALTER TABLE tb_test ADD INDEX index_oat (one, two);

ALTER TABLE tb_test add INDEX index_two(two);

使用 show keys from 表名;或show indexes from 表名; ,查看這個表的所有索引信息。

一個普通索引,一個復合索引。

復合索引遵守“最左前綴”原則即在查詢條件中使用了復合索引的第一個字段,索引才會被使用。因此,在復合索引中索引列的順序至關重要。

可以看到,創(chuàng)建了兩個索引,并且index_tow NULL 那一列是 YES。

使用EXPLAIN 來進行演示說明,EXPLAIN 的使用說明:Mysql中explain用法和結果字段的含義介紹

復合索引

普通索引

發(fā)現(xiàn)查詢two字段 是可以正常使用索引的。我使用的MYSQL 5.7 ,InnoDB 引擎。也看了一些網(wǎng)上的資料,MySQL中NULL對索引的影響 這個文章中用例子驗證,MySQL可以在含有null的列上使用索引。

備注:可能是其他條件下不行,看網(wǎng)上資料說使用空間索引會失效,具體我沒有去驗證,空間索引沒有用到過。查詢官網(wǎng)create-index-spatial,感興趣的伙伴可以自行驗證。

這里我想到一點,很多問題的答案都是在指定的條件和環(huán)境下才成立,多質疑,多驗證。

小總結 :在有NULL值得字段上使用常用的索引,如普通索引、復合索引、全文索引等不會使索引失效。在官網(wǎng)查看在空間索引的情況下,說明了 索引列必須為NOT NULL。

03 總結提升

如果你可以從上面的幾個方面和面試官進行一個溝通,即使回答的不是那么的完美,但總比 “這兩個都用過,具體有啥區(qū)別就不知道了” 這樣的回答能好那么一點點。

1、空值不占空間,NULL值占空間。當字段不為NULL時,也可以插入空值。

2、當使用 IS NOT NULL 或者 IS NULL 時,只能查出字段中沒有不為NULL的或者為 NULL 的,不能查出空值。

3、判斷NULL 用IS NULL 或者 is not null,SQL 語句函數(shù)中可以使用IFNULL()函數(shù)來進行處理,判斷空字符用 =’‘或者<>’'來進行處理。

4、在進行count()統(tǒng)計某列的記錄數(shù)的時候,如果采用的NULL值,會別系統(tǒng)自動忽略掉,但是空值是會進行統(tǒng)計到其中的。

5、MySql中如果某一列中含有NULL,那么包含該列的索引就無效了。這一句不是很準確。

6:實際到底是使用NULL值還是空值(’’),根據(jù)實際業(yè)務來進行區(qū)分。個人建議在實際開發(fā)中如果沒有特殊的業(yè)務場景,可以直接使用空值。

以上就是我的對此問題的整理和思考。如果你對此話題有自己的思考和理解,也歡迎留言一起探討!也歡迎私信我探討交流哈,還有免費的學習資料贈送

總結

以上是生活随笔為你收集整理的mysql两个字段相减_MySQL 中NULL和空值的区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 自拍偷拍视频网 | 爱爱视频网站免费 | 色www国产亚洲阿娇 自拍一区在线 | 欧美另类xxxx野战 | 欧美一区二区三区国产 | 日韩爽爽视频 | 欧美91av| 欧洲av无码放荡人妇网站 | 国产精品黄网站 | 影音先锋日韩资源 | 在线视频成人 | 亚洲偷自 | 日韩一道本 | 不卡在线一区二区 | 污污视频免费网站 | 99久热在线精品996热是什么 | 96毛片| 波多野结衣 久久 | 黄色免费av | 久久激情婷婷 | 精品中文字幕一区二区 | 亚洲香蕉视频 | 欧美男人的天堂 | 国产免费黄色小视频 | 日本网站在线免费观看 | 在线观看av一区 | av在线不卡一区 | 国产大奶在线 | 欧美激情不卡 | 牛牛电影国产一区二区 | 汗汗视频| 国产av无码专区亚洲av毛片搜 | 日韩不卡 | 欧美国产日本在线 | 日韩av一区二区在线观看 | 亚洲视频免费看 | 四虎影视永久地址 | 超碰人人澡 | 免费在线中文字幕 | 啪啪网站免费观看 | 婷婷午夜精品久久久久久性色av | 一级激情片 | 色.www| 国产欧美一区二区三区另类精品 | 在线成人小视频 | 免费看黄色片的网站 | 久久免费国产视频 | 精品国产乱码久久久久久闺蜜 | 最新毛片网 | 成人在线免费电影 | 污视频免费在线观看网站 | 国产成人99久久亚洲综合精品 | 亚洲美女屁股眼交 | 国产一区二区三区四区五区在线 | 青青操视频在线 | 国产亚洲精品成人 | 99久久久无码国产 | 国产一区二区三区在线免费观看 | 伊人久久五月天 | 欧美自拍视频在线观看 | 国产三级精品三级在线 | 最新av在线播放 | 粉嫩av一区二区三区四区五区 | 亲切的金子餐桌片段的金子 | 少妇高潮毛片 | xxx性视频| 日产精品久久久一区二区 | 欧美日韩人妻精品一区二区三区 | 女人性做爰100部免费 | 丁香五香天堂网 | 国产欧美精品一区二区色综合 | eeuss日韩 | 无码国模国产在线观看 | 爱操视频| 日本wwwwwww| 亚州av片 | 亚洲人成无码www久久久 | 对白刺激国产子与伦 | 韩国中文字幕在线观看 | 99人妻碰碰碰久久久久禁片 | h部分肌肉警猛淫文 | 成年免费视频黄网站在线观看 | 欧美xxxxxx片免费播放软件 | 国产懂色av | 一级黄色小视频 | 一级视频免费观看 | 午夜毛片 | 四虎图库 | 亚洲区一区二区三区 | 亚洲AV无码国产精品 | 性视频网址 | 超碰色偷偷 | 全程粗话对白视频videos | 亚洲色图丝袜美腿 | 女人18毛片一区二区三区 | 成年人爱爱视频 | 少妇激情偷人爽爽91嫩草 | 国产日韩成人 | 视频在线观看免费 |