MySQL設計之欄位定義為NOT NULL的原因

2021-10-23 01:26:18 字數 887 閱讀 7680

相信大家都知道在mysql設計的時候,要把字段定義為not null並且提供預設值,那其中的原因是什麼呢?主要有以下三點。

當字段不需要儲存任何東西的時候,「空值」(即『』)是不占用空間的,而null其實佔空間的,無論是表還是索引中每行中的null的列都需要額外的空間來標識。

對null 處理的時候,只能採用is null或is not null,而不能採用=、in、<、<>、!=、not in這些操作符號。比如:where name!=』haha』,如果存在name為null值的記錄,查詢結果就不會包含name為null值的記錄。

再比如

select * from table_foo where value_field in ('value1', 'value2', null)
這個sql語句其實也是有問題的,因為在mysql中,in語句會被轉換為多個=語句。會被轉換為如下sql語句:

select * from table_foo where value_field = 'value1' or value_field = 'value2' or value_field = null
那麼執行value_field = null時就會出現問題了。 正確的寫法應該是這樣:

select * from table_foo where value_field in ('value1', 'value2') or value_field is null
你看是不是有點麻煩。。

null的列使索引/索引統計/值比較都更加複雜,所以如果索引的字段可以為null,索引的效率會下降很多;null 這種型別mysql內部需要進行特殊處理,增加資料庫處理記錄的複雜性;同等條件下,表中有較多空字段的時候,資料庫的處理效能會降低很多。

MySQL欄位h設計 MySQL欄位型別

mysql欄位型別 mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。數值型別 型別大小範圍 有符號 範圍 無符號 用途 tinyint 1 位元組 128,127 0,255 小整數值 smallint 2 位元組 32 768,32 767 0,65 535 大整數值...

mysql為字段加索引

1 新增普通索引 alter table table name add index index name column 案例 alter table ts storage partinfo order batch add index idx isb id source bill 2 新增主鍵索引 a...

為什麼mysql資料庫欄位要定義為NOT NULL

在mysql資料庫中 null 和 空值 是不一樣的。null是一種比較特殊的資料型別,這也可以解釋為什麼字段設定為not null,卻仍然可以插入空值。設定了not null之後便不能插入null值了,但仍然可以插入像 這樣的空值。另外空值是不占用空間的,而null需要占用空間。在平常我們設計資料...