Mysql中NULL使用方法与注意事项

转自: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语句的查询条件中那四个至关心注重要字相当的管事。如须求查询全体电话号码为空的客户(必要他们抵补电话号码音信卡塔尔(英语:State of Qatar),就足以在询问条件中步向is
not null关键字。

澳门贵宾会注册送豪礼 4

  二是Count等总括函数,在空值上也会有特别的采纳。如今后急需总结客户消息表中有电话号码的客商数量,那时就足以应用count函数、同有时候将电话号码作为参数来行使。因为在总计进度中,这么些函数会活动忽视空值的数据。当时计算出来的就是有电话号码的客户消息。假诺运用的是空字符的数目,则那么些函数会将其总计进来。如下图所示,总括刚才创设的两条记下时,系统总结的结果是1,并非2。可见系统活动将Null值的多寡忽视掉了。

null与if
null或等等,上面笔者来给我们介绍在mysql中null的注意事项与行使方法,希望对大家能有所帮衬。
SELECT NULL =0, NU…

发表评论

电子邮件地址不会被公开。 必填项已用*标注