亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

MySQL null的一些易錯點

瀏覽:3日期:2023-10-07 15:19:23

依據null-values,MySQL的值為null的意思只是代表沒有數據,null值和某種類型的零值是兩碼事,比如int類型的零值為0,字符串的零值為””,但是它們依然是有數據的,不是null.

我們在保存數據的時候,習慣性的把暫時沒有的數據記為null,表示當前我們無法提供有效的信息.

不過使用null但是時候,需要我們注意一些問題.對此MySQL文檔說明如下: problems-with-null

使用null的易錯點

下面我摘取MySQL官方給出的null的易錯點做講解.

對MySQL不熟悉的人很容易搞混null和零值

The concept of the NULL value is a common source of confusion for newcomers to SQL

比如下面這2句SQL產生的數據是獨立的

mysql> INSERT INTO my_table (phone) VALUES (NULL);mysql> INSERT INTO my_table (phone) VALUES (’’);

第一句SQL只是表示暫時不知道電話號碼是多少,第二句是電話號碼知道并且記錄為’’

Both statements insert a value into the phone column, but the first inserts a NULL value and the second inserts an empty string. The meaning of the first can be regarded as “phone number is not known” and the meaning of the second can be regarded as “the person is known to have no phone, and thus no phone number.”

對null的邏輯判斷要單獨處理

對于是否為null的判斷必須使用專門的語法IS NULL,IS NOT NULL,IFNULL().

To help with NULL handling, you can use the IS NULL and IS NOT NULL operators and the IFNULL() function.

如果你使用=判斷,那么永遠是false

In SQL, the NULL value is never true in comparison to any other value, even NULL

To search for column values that are NULL, you cannot use an expr = NULL test. The following statement returns no rows, because expr = NULL is never true

比如你這樣寫,where后判斷的結果永不會是true:

SELECT * FROM my_table WHERE phone = NULL;

如果你使用null和其他數據做計算,那么結果永遠是null,除非MySQL文檔對某些操作做了額外的特殊說明

An expression that contains NULL always produces a NULL value unless otherwise indicated in the documentation for the operators and functions involved in the expression

例如:

mysql> SELECT NULL, 1+NULL, CONCAT(’Invisible’,NULL);+------+--------+--------------------------+| NULL | 1+NULL | CONCAT(’Invisible’,NULL) |+------+--------+--------------------------+| NULL | NULL | NULL |+------+--------+--------------------------+1 row in set (0.00 sec)

所以你要對null做邏輯判斷,還是乖乖的使用IS NULL

To look for NULL values, you must use the IS NULL test對有null值的列做索引要額外預料到隱藏的細節

只有InnoDB,MyISAM,MEMORY 存儲引擎支持給帶有null值的列做索引

You can add an index on a column that can have NULL values if you are using the MyISAM, InnoDB, or MEMORY storage engine. Otherwise, you must declare an indexed column NOT NULL, and you cannot insert NULL into the column.

索引的長度會比普通索引大1,也就是略微耗內存點

Due to the key storage format, the key length is one greater for a column that can be NULL than for a NOT NULL column.

對null值做分組,去重,排序會被特殊對待

和上文講的=null永遠是false相反,這時null 被認為是相等的.

When using DISTINCT, GROUP BY, or ORDER BY, all NULL values are regarded as equal.

對null排序會被特殊對待

null值要么被排在最前面,要么最后面

When using ORDER BY, NULL values are presented first, or last if you specify DESC to sort in descending order.

聚合操作時null被忽略

Aggregate (group) functions such as COUNT(), MIN(), and SUM() ignore NULL values

例如count(*)不會統計值為null的數據.

The exception to this is COUNT(*), which counts rows and not individual column values. For example, the following statement produces two counts. The first is a count of the number of rows in the table, and the second is a count of the number of non-NULL values in the age column:

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

以上就是MySQL null的一些易錯點的詳細內容,更多關于MySQL null的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 欧美午夜精品一区二区三区 | 92手机看片福利永久国产 | 国产精品国产三级国产a | 欧美zzzz| 精品久久伦理中文字幕 | 欧美成人久久一级c片免费 欧美成人午夜不卡在线视频 | 亚洲福利精品一区二区三区 | 国内精品久久久久激情影院 | 国产成人做受免费视频 | 1769视频在线 | 亚洲综合图色国模40p | 国产精品成人嫩妇 | 日本一区二区三区有限公司 | 欧美r级在线观看 | 999jjj在线播放 | 亚洲国产高清美女在线观看 | 国产精品不卡无毒在线观看 | 国产99精品在线观看 | 国产亚洲一区二区手机在线观看 | 国产一级视频免费 | 成人一级毛片 | 国产精品性 | 免费看欧美日韩一区二区三区 | 欧美黄色一级大片 | 中文字幕在线精品视频万部 | 99je全部都是精品视频在线 | 色综合天天综合高清影视 | 美国毛片在线观看 | 美女内部福利视频在线观看 | 日本亚欧乱色视频在线系列 | 欧美一区二区三区在线播放 | xxxww日本 | 欧美日韩综合精品一区二区三区 | 男女又黄又刺激黄a大片桃色 | 亚洲欧美日韩中文字幕久久 | 亚洲欧美综合在线观看 | 中日黄色大片 | 欧美日韩在线精品一区二区三区 | 毛片女人毛片一级毛片毛片 | 日韩毛片在线影视 | 国产视频久 |