数据库教程:MySQL中对于NULL值的理解和使用教程分享

NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串”的一样的东西。不是这样的!例如,下列语句是完全不同的:

mysql>INSERTINTOmy_table(phone)VALUES(NULL); mysql>INSERTINTOmy_table(phone)VALUES("");

两个语句把值插入到phone列,但是第一个插入一个NULL值而第二个插入一个空字符串。第一个的含义可以认为是“电话号码不知道”,而第二个则可意味着“她没有电话”。

在SQL中,NULL值在于任何其他值甚至NULL值比较时总是假的(FALSE)。包含NULL的一个表达式总是产生一个NULL值,除非在包含在表达式中的运算符和函数的文档中指出。在下列例子,所有的列返回NULL:

mysql>SELECTNULL,1+NULL,CONCAT('Invisible',NULL);

如果你想要寻找值是NULL的列,你不能使用=NULL测试。下列语句不返回任何行,因为对任何表达式,expr=NULL是假的:

mysql>SELECT*FROMmy_tableWHEREphone=NULL;

要想寻找NULL值,你必须使用ISNULL测试。下例显示如何找出NULL电话号码和空的电话号码:

mysql>SELECT*FROMmy_tableWHEREphoneISNULL; mysql>SELECT*FROMmy_tableWHEREphone="";

在MySQL中,就像很多其他的SQL服务器一样,你不能索引可以有NULL值的列。你必须声明这样的列为NOTNULL,而且,你不能插入NULL到索引的列中。

当用LOADDATAINFILE读取数据时,空列用”更新。如果你想要在一个列中有NULL值,你应该在文本文件中使用N。字面上的词’NULL’也可以在某些情形下使用。

当使用ORDERBY时,首先呈现NULL值。如果你用DESC以降序排序,NULL值最后显示。当使用GROUPBY时,所有的NULL值被认为是相等的。

为了有助于NULL的处理,你能使用ISNULL和ISNOTNULL运算符和IFNULL()函数。

MySQL的IFNULL()函数和Oracle的NVL()函数功能类似。以下简单举例:
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。

mysql>selectIFNULL(1,0); ->1 mysql>selectIFNULL(0,10); ->0 mysql>selectIFNULL(1/0,10); ->10 mysql>selectIFNULL(1/0,'yes'); ->'yes' NVL(string1,replace_with)

功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。
引申一下,此NVL的作用与SQLserver中的ISNULL(string1,replace_with)一样。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数。
例:

NVL(TO_CHAR(numeric_column),'somestring')

其中numeric_column代指某个数字类型的值。
例:

nvl(yanlei777,0)>0

NVL(yanlei777,0)的意思是如果yanlei777是NULL,则取0值

null与空值的辨析
来看这样一段代码:

CREATETABLE`test`( `col1`VARCHAR(10)CHARACTERSETutf8COLLATEutf8_general_ciNOTNULL, `col2`VARCHAR(10)CHARACTERSETutf8COLLATEutf8_general_ciNULL )ENGINE=MYISAM;

错误(不可以插入null值):

INSERTINTO`test`VALUES(null,1);

正确(插入”没问题):

INSERTINTO`test`VALUES('',1); INSERTINTO`test`VALUES('',NULL); INSERTINTO`test`VALUES('1','2');

检索(”不是null,所以notnull会把”都算进去):

SELECT*FROM`test`WHEREcol1ISNOTNULL

结果:所有三条数据

检索(正常检索):

SELECT*FROM`test`WHEREcol1<>''

结果:最后一条数据

检索(<>”,会同时排除”和null的数据,只检索有内容的数据):

SELECT*FROM`test`WHEREcol2<>''

上述就是数据库技术:MySQL中对于NULL值的理解和使用教程分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/911588.html

(0)
上一篇 2021年10月25日
下一篇 2021年10月25日

精彩推荐