首頁 > 軟體

MySQL如何修改欄位的預設值和空值

2022-08-29 22:06:28

MySQL修改欄位的預設值和空值

修改欄位預設值

  • 修改:
ALTER TABLE 表名 ALTER COLUMN 欄位名 SET DEFAULT 預設值
  • 刪除:
ALTER TABLE 表名 ALTER COLUMN 欄位名 DROP DEFAULT

修改欄位值是否為空

  • 設為空:
ALTER TABLE 表名 MODIFY 欄位名 欄位型別 NULL
  • 設為非空:
ALTER TABLE 表名 MODIFY 欄位名 欄位型別 NOT NULL

MySQL預設值NULL、空值、Empty String的區別

如何選擇?

工作一年左右了,發現其實工作中除了需要實現業務程式碼外,更多的是與資料庫打交道。最近因為專案需要,我也逐漸參與進入資料庫的設計,從而發現了很多之前沒有過多注意的問題。

回想這一年來,寫部落格的次數屈指可數,現在想重新拾起,所以打算從資料庫方面入手,先總結一個比較簡單但非常常用的知識點——mysql中欄位預設值的問題。

我們可以看到,預設值的設定主要分為三種:

  • 1.空值,空白,即什麼都不填,等同於NULL(設計表結構時儲存空值會自動變成NULL),當然也可以手動輸入預設值。
  • 2.NULL。
  • 3.Empty String,空字串,可以理解為0位元組長度的字串,等同於單引號''和雙引號""。

其中,空值 = NULL,Empty String = 空字串 = '' = ""。

那麼問題來了,當設定某一個欄位的預設值的時候,是設定空值、NULL還是Empty String呢?

先說結論

建議不要使用NULL或空值,String型別的欄位可以設定預設為Empty String(即空字串''),Int型別的欄位可以設定預設為0。

尤其是使用php做介面開發時,設定欄位型別為not null可以避免產生很多問題,如果查詢出null資料直接返回給Android或IOS,而行動端又沒有進行處理的話,程式就會報錯。所以為了避免這種情況,一定要在伺服器端資料庫層面從根源上解決這個問題。

因為空值 = NULL,所以談論區別時只比較NULL和空字元''串即可。

區別

1、NULL是佔用磁碟空間的(並不是資料本身佔用空間,而是儲存它是否為NULL的標記佔用1個位元組),而空字串''是不佔用磁碟空間的(它的長度是0位元組所以不佔用)。

網上找到的相關資料顯示NULL是佔用磁碟空間的

官方檔案說明:NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.

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

即:定義欄位型別時,如果允許為NULL,那麼就要為每條資料多分配一個位元組的空間來表示欄位是否為NULL。

直接在mysql中驗證即可:

2、欄位型別是varchar時可以預設為空字串,欄位型別是int時不可以預設為空字串,可以設定為0。

3、當欄位被設定為not null時,欄位就不能是NULL但可以插入空字串,但空字串只能插入到字串型別的欄位中,插入其他型別的欄位中會報錯。而NULL可插入到任何允許為NULL的欄位中。

4、SQL語句中對空字串進行判斷時可以使用=、>、<符號;但是對NULL進行判斷時必須使用is null或is not null。

5、包含NULL的欄位列,如果在查詢條件中使用is not null會導致索引失效,但是使用is null索引不會失效。

6、使用count()函數進行統計時,會過濾掉NULL值,但不會過濾掉空字串。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com