这里為(wèi)您推荐鹏程科(kē)技(jì )新(xīn)闻动态,包含公(gōng)司新(xīn)闻、行业动态、媒體(tǐ)新(xīn)闻等重要动态,您可(kě)通过本栏目了解鹏程科(kē)技(jì )背后的故事,更多(duō)行业新(xīn)闻。
MySQL数据库是一个基于结构化数据的开源数据库。SQL语句是MySQL数据库中(zhōng)核心语言。不过在MySQL数据库中(zhōng)执行SQL语句,需要小(xiǎo)心两个陷阱。
陷阱一:空值不一定為(wèi)空
空值是一个比较特殊的字段。在MySQL数据库中(zhōng),在不同的情形下,空值往往代表不同的含义。这是MySQL数据库的一种特性。如在普通的字段中(zhōng)(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到TimesTamp类型的字段中(zhōng),空值就不一定為(wèi)空。此时為(wèi)出现什么情况呢(ne)(如下图)?
我先创建了一个表。在这个表中(zhōng)有(yǒu)两个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。现在往这个表中(zhōng)插入一条记录,其中(zhōng)往Date字段中(zhōng)插入的是一个NULL空值。可(kě)是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢(ne)?其实这就是在MySQL数据库中(zhōng)执行SQL语句时经常会遇到的一个陷阱:空值不一定為(wèi)空。在操作(zuò)时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。
在MySQL数据库中(zhōng),NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是筆(bǐ)者上面举的TimesTamp数据类型。如果往这个数据类型的列中(zhōng)插入Null值,则其代表的就是系统的当前时间。另外一个是具(jù)有(yǒu)auto_increment属性的列。如果往这属性的列中(zhōng)插入Null值的话,则系统会插入一个正整数序列。而如果在其他(tā)数据类型中(zhōng),如字符型数据的列中(zhōng)插入Null的数据,则其插入的就是一个空值。
陷阱二:空值不一定等于空字符
在MySQL中(zhōng),空值(Null)与空字符(’’)相同吗?答(dá)案是否定的。请大家先来看下图的演示。
在同一个数据库表中(zhōng),同时插入一个Null值的数据和一个’’空字符的数据,然后利用(yòng)Select语句进行查询。最后显示的结果如上图所示。显然其显示的结果是不相同的。从这个结果中(zhōng)就可(kě)以看出,空值不等于空字符。这就是在MySQL中(zhōng)执行SQL语句遇到的第二个陷阱。在实际工(gōng)作(zuò)中(zhōng),空值数据与空字符往往表示不同的含义。数据库管理(lǐ)员可(kě)以根据实际的需要来进行选择。如对于電(diàn)话号码等字段,可(kě)以默认设置為(wèi)空值(表示根本不知道对方的電(diàn)话号码)或者设置為(wèi)空字符(表示后来取消了这个号码)等等。由于他(tā)们在数据库中(zhōng)会有(yǒu)不同的表现形式,所以数据库管理(lǐ)员需要區(qū)别对待。筆(bǐ)者更加喜欢使用(yòng)空值,而不是空字符。这主要是因為(wèi)针对空值这个数据类型有(yǒu)几个比较特殊的运算字符。如果某个字段是空字符,数据库中(zhōng)是利用(yòng)字段名(míng)称来代替。相反,如果插入的是空值,则直接显示的是NULL。这跟其他(tā)数据库的显示方式也是不同的。
一是IS NULL 和IS NOT NULL关键字。如果要判断某个字段是否含用(yòng)空值的数据,需要使用(yòng)特殊的关键字。其中(zhōng)前者表示这个字段為(wèi)空,后者表示这个字段為(wèi)非空。在Select语句的查询条件中(zhōng)这两个关键字非常的有(yǒu)用(yòng)。如需要查询所有(yǒu)電(diàn)话号码為(wèi)空的用(yòng)户(需要他(tā)们补充電(diàn)话号码信息),就可(kě)以在查询条件中(zhōng)加入is not null关键字。
二是Count等统计函数,在空值上也有(yǒu)特殊的应用(yòng)。如现在需要统计用(yòng)户信息表中(zhōng)有(yǒu)電(diàn)话号码的用(yòng)户数量,此时就可(kě)以使用(yòng)count函数、同时将電(diàn)话号码作(zuò)為(wèi)参数来使用(yòng)。因為(wèi)在统计过程中(zhōng),这个函数会自动忽略空值的数据。此时统计出来的就是有(yǒu)電(diàn)话号码的用(yòng)户信息。如果采用(yòng)的是空字符的数据,则这个函数会将其统计进去。如下图所示,统计刚才建立的两条记录时,系统统计的结果是1,而不是2。可(kě)见系统自动将Null值的数据忽略掉了。
鹏程科(kē)技(jì )依托八年的郑州网站建设,郑州网站制作(zuò),郑州网站推广,郑州网页(yè)制作(zuò)经验,為(wèi)您提供从专业的郑州网站建设,郑州网站制作(zuò),郑州网页(yè)设计,郑州网站推广等一站式互联网服務(wù)。鹏程科(kē)技(jì ),企业E化首选品牌!24小(xiǎo)时热線(xiàn):15136265866
郑州鹏程计算机技(jì )术有(yǒu)限公(gōng)司是以提供政府重点项目管理(lǐ)、智慧招商(shāng)项目监管平台、智慧统战大数据平台、智慧高校统战大数据平台、智慧侨联服務(wù)大数据平台、智慧台办(bàn)服務(wù)大数据平台、智慧民(mín)宗大数据平台、智慧新(xīn)阶层大数据平台、智慧政协大数据平台、智慧党派参政议政大数据平台、智慧工(gōng)商(shāng)联大数据平台、智慧商(shāng)会大数据平台、智慧文(wén)旅解决方案為(wèi)主的科(kē)技(jì )型研发企业。為(wèi)发改委(项目办(bàn))、招商(shāng)局(投资促进局)、统战部、民(mín)宗局、侨联、台办(bàn)、新(xīn)联会、各级政协、民(mín)主党派、工(gōng)商(shāng)联机关提供信息化服務(wù)。
版权所有(yǒu): 郑州鹏程计算机技(jì )术有(yǒu)限公(gōng)司京ICP证000000号