在mysql中空與空值是兩碼事的,也就是大家說null或“”這種了,下面我總結(jié)了一些關(guān)于在mysql null與“”值的刪除與理解方法與大家分享.
空值與NULL的區(qū)別:我們先來理解mysql中空值與NULL的區(qū)別是什么吧,一些剛剛接觸MySQL的孩子,經(jīng)常會(huì)錯(cuò)誤的認(rèn)為NULL與空字符串’ ’是相同的,這看似是一件不重要的事情,但是在MySQL中,這兩者是完全不同的,NULL是指沒有值,而”則表示值是存在的,只不過是個(gè)空值.
這就相當(dāng)于廠子給職工分房子,一共只有一套,老張和老李都想要,可是經(jīng)理告訴老張,下次有您的房子,可是老李壓根就沒人搭理他,所以老張的房子是“空”的,因?yàn)檫@是空白支票,不過畢竟經(jīng)理張口了,而老李的房子就是NULL的,因?yàn)楦揪蜎]有人考慮過他.
一些根本不懂空值和NULL有什么區(qū)別,誤導(dǎo)初學(xué)者.
所謂的NULL就是什么都沒有,連都沒有,在字符串中是結(jié)束符,但是在物理內(nèi)存是占空間的,等于一個(gè)字節(jié),而NULL就是連這一個(gè)字節(jié)都沒有,在數(shù)據(jù)庫(kù)里是嚴(yán)格區(qū)分的,任何數(shù)跟NULL進(jìn)行運(yùn)算都是NULL,判斷值是否等于NULL,不能簡(jiǎn)單用=,而要用IS關(guān)鍵字,Mysql3.23.0或以后支持用 <=> 用來比較兩個(gè)NULL值是否相等,即 select * from table where id <=> NULL.
為什么會(huì)出現(xiàn)NULL?這是來源于數(shù)據(jù)庫(kù)的左右連接,不是憑空想出來的,比如:
- A(ID, Name), B(ID, Address)
- 1, Name1 1, Shanghai
- 2, Name2 3, Beijing
- 當(dāng)A左連接B則得到:
- 1, Name1, Shanghai
- 2, Name2, NULL
- //Vevb.com
- 當(dāng)A右連接B則得到:
- 1, Name1, Shanghai
- 3, NULL, Beijing
數(shù)據(jù)庫(kù)的字段ID設(shè)為NOT NULL, 僅僅說明該字段不能為NULL,也就是說只有在:
INSERT INTO table(ID) VALUES(NULL);
這種情況下數(shù)據(jù)庫(kù)會(huì)報(bào)錯(cuò),而:
INSERT INTO table(ID) VALUES(‘ ‘);
這不能說明是NULL,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)根據(jù)ID設(shè)的缺省值填充,或者如果是自增字段就自動(dòng)加一等缺省操作.
例,值為NULL:delete from 表名 where 字段名=NULL
值為""空值:delete from 表名 where 字段名=''
總結(jié):判斷NULL用is null 或者 is not null,sql語(yǔ)句里可以用ifnull函數(shù)來處理,判斷空字符串‘’,要用 ='' 或者 <>'',sql語(yǔ)句里可以用if(col,col,0)處理,即,當(dāng)col為true時(shí)(非null,及非'')顯示,否則打印0.
新聞熱點(diǎn)
疑難解答
圖片精選