尤为重要字在值为null的应用比如,Mysql中NULL使用

2019-10-06 19:24 来源:未知

转自:http://www.maomao365.com/?p=6873

在mysql中null包罗了not null与if null或等等,上面笔者来给我们介绍在mysql中null的注意事项与行使方式,希望对大家能具有帮助。

摘要:
下文通过案例深入分析in 关键字在值为null的运用举个例子,
分析出not in关键字在null值发生的非常信息
平常来讲所示:

SELECT NULL =0, NULL =12345, NULL <>12345, NULL +12345, NULL || ‘abc’, NULL = NULL , NULL <> NULL , NULL AND TRUE , NULL AND FALSE , NULL OR FALSE , NULL OR TRUE , NOT (NULL);

CREATE TABLE testA(keyId INT)
CREATE TABLE testB(keyId INT)
GO
INSERT INTO testA(keyId) VALUES (1)
INSERT INTO testA(keyId) VALUES (2)
INSERT INTO testA(keyId) VALUES (3)
GO
INSERT INTO testB(keyId) VALUES (1)
INSERT INTO testB(keyId) VALUES (2)
INSERT INTO testB(keyId) VALUES (4)
INSERT INTO testB(keyId) VALUES (NULL)
GO
 SELECT * FROM testA WHERE keyId IN (SELECT keyId FROM testB)
-----输出------
/*
keyId
1
2
*/
 SELECT * FROM testA WHERE keyId not IN (SELECT keyId FROM testB)
------无输出记录-----
/*
keyId
*/
INSERT INTO testA VALUES (NULL) ---在testA表中插入空值
SELECT * FROM testA WHERE EXISTS(
    SELECT null  FROM testB WHERE testA.keyId=testB.keyId    
)
----输出----
/*
keyId
1
2
*/
SELECT * FROM testA WHERE not  EXISTS(
    SELECT null  FROM testB WHERE testA.keyId=testB.keyId    
)
/*
keyId
3
NULL
*/
SELECT * FROM testA WHERE testA.keyId NOT in (
    SELECT testB.keyId FROM testB WHERE testB.keyId IS NOT NULL    
)

drop table testA
drop table testB

假定那是一道面试题,推测不驾驭有微微工程师以至是DBA会捐躯……

 

没有错的答案是怎么着?(为了强化印象,建议复制SQL到mysql里去推行,看一下)

透过以上测验,大家得以看看not in 查询关键字如若子表中存在空值,则不能查询出另外笔录,会招致极度爆发,
需使用not exists获取相应的空值音信

下边跟大家深入分析一下缘故:

图片 1

那么在动用中如何防止NULL带来的部分麻烦呢?

•把NULL当成三个出色值,不对等空、0、FALSE,使用IS NULL/IS NOT NULL去检验
•评释NOT NULL列,给于默许值

Null时要在意两大陷阱

骗局一:空值不必然为空

  空值是四个比较卓越的字段。在MySQL数据库中,在分裂的景色下,空值往往意味着分裂的含义。那是MySQL数据库的一种特性。如在平日的字段中(字符型的数目),空值便是意味空值。不过借使将三个空值的数额插入到TimesTamp类型的字段中,空值就不自然为空。此时为出现哪些情形吧(如下图)?

图片 2

  小编先创造了一个表。在那几个表中有七个字段:User_id(其数据类型是int)、Date(其数据类型是TimesTamp)。以往往这一个表中插入一条记下,当中往Date字段中插入的是三个NULL空值。可是当大家询问时,其结果显示的却是插入记录的超过天子。这是怎么叁次事呢?其实那就是在MySQL数据库中试行SQL语句时平日会遇上的三个陷阱:空值不肯定为空。在操作时,明明插入的是一个空值的数量,不过最后查询得到的却不是四个空值。

  在MySQL数据库中,NULL对于部分特出类型的列来讲,其象征了一种非凡的含义,而不光是八个空值。对于这个特别类别的列,各位读者首借使要切记多个。叁个正是作者下边举的TimesTamp数据类型。借使往那些数据类型的列中插入Null值,则其表示的就是系统的脚下时光。另外多个是颇负auto_increment属性的列。若是往那属性的列中插入Null值的话,则系统会插入多少个正整数体系。而只要在另外数据类型中,如字符型数据的列中插入Null的多寡,则其插入的正是三个空值。

  陷阱二:空值不自然等于空字符

  在MySQL中,空值(Null)与空字符(’’)一样呢?答案是或不是定的。请我们先来看下图的示范。

图片 3

  在同贰个数据库表中,同临时候插入叁个Null值的数目和叁个’’空字符的数目,然后使用Select语句进行查询。最后展现的结果如上图所示。明显其出示的结果是差异样的。从那些结果中就足以看看,空值不对等空字符。那就是在MySQL中执行SQL语句际遇的第三个骗局。在事实上工作中,空值数据与空字符往往意味着差别的意思。数据库管理员能够依赖实际的内需来张开精选。

  如对于电话号码等字段,能够私下认可设置为空值(表示向来不亮堂对方的电话号码)可能设置为空字符(表示后来撤回了那个编号)等等。由于他们在数据库中会有例外的表现情势,所以数据库管理员须求区分看待。笔者越发爱怜使用空值,实际不是空字符。那主要是因为针对空值这一个数据类型有多少个相比较特殊的演算字符。假如某些字段是空字符,数据库中是行使字段名称来代替。相反,假设插入的是空值,则平素体现的是NULL。那跟其余数据库的展现格局也是见仁见智的。

  一是IS NULL 和IS NOT NULL关键字。假如要一口咬住不放有个别字段是不是含用空值的数码,必要利用异乎平日的要紧字。当中前者表示这一个字段为空,后面一个表示那一个字段为非空。在Select语句的询问条件中那一个关键字格外的有效性。如供给查询全部电话号码为空的客户(要求他们填补电话号码音讯),就足以在询问条件中步向is not null关键字。

图片 4

  二是Count等总结函数,在空值上也可以有独特的采取。如现在内需总括客商音讯表中有电话号码的客商数量,此时就足以行使count函数、同期将电话号码作为参数来行使。因为在总括进程中,那么些函数会自动忽略空值的数码。此时总计出来的正是有电话号码的客商新闻。假如采用的是空字符的多少,则这些函数会将其总括进来。如下图所示,计算刚才创设的两条记下时,系统总括的结果是1,实际不是2。可知系统活动将Null值的数目忽略掉了。

null与if null或等等,上边笔者来给大家介绍在mysql中null的注意事项与应用办法,希望对我们能抱有利于。 SELECT NULL =0, NU...

TAG标签:
版权声明:本文由金沙澳门唯一官网发布于数据库管理,转载请注明出处:尤为重要字在值为null的应用比如,Mysql中NULL使用