對NotNull字段插入Null值有啥現(xiàn)象?

1從一個小實驗開始

首先創(chuàng)建數(shù)據(jù)表,只有1列id、沒有默認(rèn)值,且不能為Null

然后我們像下面這樣嘗試插入一條SQL。

你會發(fā)現(xiàn),本篇的問題答案已經(jīng)有了:默認(rèn)情況下,如果該列要求不能為null。用戶還往里面寫入null,就會報錯:cannot be null

當(dāng)然本篇文章并沒有結(jié)束,下面跟大家分享另外一個拓展知識:sql mode 。

這個拓展知識點也是下一篇文章“ 能談?wù)?date、datetime、time、timestamp、year的區(qū)別嗎?” 的儲備知識。

2sql的執(zhí)行模式

引出了一個 sql_mode 的概念,也就是SQL的執(zhí)行模式。

默認(rèn)情況下MySQL會用嚴(yán)格模式運行SQL。

你可以像下面這樣查看MySQL使用了哪些sql mode。

MySQL會根據(jù)sql_mode系統(tǒng)變量的值將這些模式不同地應(yīng)用于不同的客戶端。

使用不同的sql mode執(zhí)行sql,可能會得到不同的響應(yīng)結(jié)果。

3通過實驗測試sql mode

為了更直觀的看出sql mode 對sql執(zhí)行結(jié)果的影響,推薦你看一下下面的這兩個小Demo,都不復(fù)雜。

實驗一:

創(chuàng)建一張簡單的表 t3,id非空、沒有默認(rèn)值。

先看看默認(rèn)的情況下,會有什么響應(yīng)!

在默認(rèn)的sql mode下,執(zhí)行一條插入空值的語句,發(fā)現(xiàn)報錯了

再看看,關(guān)閉嚴(yán)格的sql mode后會有什么響應(yīng)。

關(guān)閉嚴(yán)格模式后執(zhí)行的結(jié)果如下圖所示。

你會發(fā)現(xiàn)這次結(jié)果是 wanring + MySQL幫你插入默認(rèn)值

實驗二:

默認(rèn)開啟嚴(yán)格模式后往int類型的列插入空串(任意串)會報錯。

關(guān)閉嚴(yán)格模式后,執(zhí)行下面的SQL會爆出wanrning。

查看插入的結(jié)果

從上面的實驗來看,相信你已經(jīng)看出了現(xiàn)象:無論是否開啟了嚴(yán)格模式,MySQL都不允許往not null字段插入null值,它不會因為你插入null,而將null轉(zhuǎn)成該數(shù)據(jù)類型的0值。

所謂都嚴(yán)格模式,就是將參數(shù) NO_AUTO_CREATE_USER 設(shè)置給sql mode

3需要你了解的幾個 sql mode

下面再為大家介紹幾個常見或者和日期相關(guān)的sql mode。

研發(fā)的同學(xué)了解就好了,不用刻意記住它,了解就是加分項!

1、STRICT_TRANS_TABLES

將其加入到sql_mode之后,MySQL會判斷是否可以直接把用戶給的值插入事務(wù)表中,如果不能就中止該語句。對于非事務(wù)表,如果該值出現(xiàn)在單行語句或多行語句的第一行中,則中止該語句。

結(jié)合上面的例子可以更好的理解STRICT_TRANS_TABLES的作用。

2、NO_ZERO_IN_DA****TE

將其加入到sql_model之后,MySQL將不允許你將諸如 0000-10-10、2020-00-10、2020-10-00等年份、月份、日期為零的值插入到Date列中。

目前該參數(shù)處于目前該參數(shù)默認(rèn)會生效,但是在未來的版本中將會被刪除。

3、NO_ZERO_DATE:

該參數(shù)控制MySQL是否允許將 '0000-00-00'作為有效日期。

如果未啟用此模式, '0000-00-00'允許插入不會產(chǎn)生警告。

如果啟用此模式,'0000-00-00' 允許插入且產(chǎn)生警告。

如果啟用了此模式和嚴(yán)格模式, '0000-00-00' 插入產(chǎn)生錯誤,除非 IGNORE同樣給出。對于 INSERT IGNOREUPDATE IGNORE,'0000-00-00'允許插入且產(chǎn)生警告。

4結(jié)語

本文到這里就行將結(jié)束了,主要跟大家分享一個 sql mode 拓展知識點。

作為研發(fā)同學(xué)的你了解就好了,如果沒時間去實際操作一下就看下我上面的小Demo。不積跬步,無以至千里。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容