MySQL如何修改字段的默認(rèn)值和空值
MySQL修改字段的默認(rèn)值和空值
修改字段默認(rèn)值
- 修改:
ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默認(rèn)值
- 刪除:
ALTER TABLE 表名 ALTER COLUMN 字段名 DROP DEFAULT
修改字段值是否為空
- 設(shè)為空:
ALTER TABLE 表名 MODIFY 字段名 字段類型 NULL
- 設(shè)為非空:
ALTER TABLE 表名 MODIFY 字段名 字段類型 NOT NULL
MySQL默認(rèn)值NULL、空值、Empty String的區(qū)別
如何選擇?
工作一年左右了,發(fā)現(xiàn)其實(shí)工作中除了需要實(shí)現(xiàn)業(yè)務(wù)代碼外,更多的是與數(shù)據(jù)庫(kù)打交道。最近因?yàn)轫?xiàng)目需要,我也逐漸參與進(jìn)入數(shù)據(jù)庫(kù)的設(shè)計(jì),從而發(fā)現(xiàn)了很多之前沒(méi)有過(guò)多注意的問(wèn)題。
回想這一年來(lái),寫(xiě)博客的次數(shù)屈指可數(shù),現(xiàn)在想重新拾起,所以打算從數(shù)據(jù)庫(kù)方面入手,先總結(jié)一個(gè)比較簡(jiǎn)單但非常常用的知識(shí)點(diǎn)——mysql中字段默認(rèn)值的問(wèn)題。

我們可以看到,默認(rèn)值的設(shè)置主要分為三種:
- 1.空值,空白,即什么都不填,等同于NULL(設(shè)計(jì)表結(jié)構(gòu)時(shí)保存空值會(huì)自動(dòng)變成NULL),當(dāng)然也可以手動(dòng)輸入默認(rèn)值。
- 2.NULL。
- 3.Empty String,空字符串,可以理解為0字節(jié)長(zhǎng)度的字符串,等同于單引號(hào)''和雙引號(hào)""。
其中,空值 = NULL,Empty String = 空字符串 = '' = ""。
那么問(wèn)題來(lái)了,當(dāng)設(shè)定某一個(gè)字段的默認(rèn)值的時(shí)候,是設(shè)定空值、NULL還是Empty String呢?
先說(shuō)結(jié)論
建議不要使用NULL或空值,String類型的字段可以設(shè)置默認(rèn)為Empty String(即空字符串''),Int類型的字段可以設(shè)置默認(rèn)為0。
尤其是使用php做接口開(kāi)發(fā)時(shí),設(shè)置字段類型為not null可以避免產(chǎn)生很多問(wèn)題,如果查詢出null數(shù)據(jù)直接返回給Android或IOS,而移動(dòng)端又沒(méi)有進(jìn)行處理的話,程序就會(huì)報(bào)錯(cuò)。所以為了避免這種情況,一定要在服務(wù)端數(shù)據(jù)庫(kù)層面從根源上解決這個(gè)問(wèn)題。
因?yàn)榭罩?= NULL,所以談?wù)搮^(qū)別時(shí)只比較NULL和空字符''串即可。
區(qū)別
1、NULL是占用磁盤(pán)空間的(并不是數(shù)據(jù)本身占用空間,而是存儲(chǔ)它是否為NULL的標(biāo)記占用1個(gè)字節(jié)),而空字符串''是不占用磁盤(pán)空間的(它的長(zhǎng)度是0字節(jié)所以不占用)。
網(wǎng)上找到的相關(guān)資料顯示NULL是占用磁盤(pán)空間的
官方文檔說(shuō)明: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列需要行中的額外空間來(lái)記錄它們的值是否為NULL。
即:定義字段類型時(shí),如果允許為NULL,那么就要為每條數(shù)據(jù)多分配一個(gè)字節(jié)的空間來(lái)表示字段是否為NULL。
直接在mysql中驗(yàn)證即可:

2、字段類型是varchar時(shí)可以默認(rèn)為空字符串,字段類型是int時(shí)不可以默認(rèn)為空字符串,可以設(shè)置為0。
3、當(dāng)字段被設(shè)置為not null時(shí),字段就不能是NULL但可以插入空字符串,但空字符串只能插入到字符串類型的字段中,插入其他類型的字段中會(huì)報(bào)錯(cuò)。而NULL可插入到任何允許為NULL的字段中。
4、SQL語(yǔ)句中對(duì)空字符串進(jìn)行判斷時(shí)可以使用=、>、<符號(hào);但是對(duì)NULL進(jìn)行判斷時(shí)必須使用is null或is not null。
5、包含NULL的字段列,如果在查詢條件中使用is not null會(huì)導(dǎo)致索引失效,但是使用is null索引不會(huì)失效。
6、使用count()函數(shù)進(jìn)行統(tǒng)計(jì)時(shí),會(huì)過(guò)濾掉NULL值,但不會(huì)過(guò)濾掉空字符串。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql Sort aborted: Out of sort memory, consider increasing
這篇文章主要介紹了mysql Sort aborted: Out of sort memory, consider increasing server sort buffer size的解決方法,需要的朋友可以參考下2016-05-05
網(wǎng)站前端和后臺(tái)性能優(yōu)化的34條寶貴經(jīng)驗(yàn)和方法
網(wǎng)站前端和后臺(tái)性能優(yōu)化的34條寶貴經(jīng)驗(yàn)和方法,相關(guān)網(wǎng)頁(yè)技術(shù)人員,需要注意的地方。2011-05-05
Windows平臺(tái)下MySQL安裝與配置方法與注意事項(xiàng)
這篇文章主要介紹了Windows平臺(tái)下MySQL安裝與配置方法與注意事項(xiàng),需要的朋友可以參考下2017-04-04
解決Win10系統(tǒng)安裝MySQL8.0遇到的問(wèn)題
這篇文章主要介紹了Win10系統(tǒng)安裝MySQL8.0遇到的問(wèn)題及解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-12-12
MySQL 8.0.20 Window10免安裝版配置及Navicat管理教程圖文詳解
這篇文章主要介紹了MySQL 8.0.20 Window10免安裝版配置及Navicat管理,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Mysql和SQLServer驅(qū)動(dòng)連接的實(shí)現(xiàn)步驟
本文主要介紹了Mysql和SQL?Server的驅(qū)動(dòng)連接,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

