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获取相应的空值信息

下边跟大家剖判一下原因:

www.463.com 1

那正是说在采纳中如何防止NULL带来的部分麻烦呢?

•把NULL当成三个不相同平时值,不对等空、0、FALSE,使用IS NULL/IS NOT
NULL去检查测验
www.463.com,•评释NOT NULL列,给于暗中认可值

Null时要留意两大陷阱

骗局一:空值不料定为空

  空值是叁个相比特殊的字段。在MySQL数据库中,在不一样的事态下,空值往往代表差别的意思。那是MySQL数据库的一种特色。如在平时的字段中(字符型的数据),空值正是意味空值。但是倘使将贰个空值的数量插入到TimesTamp类型的字段中,空值就不自然为空。此时为出现什么样境况吧(如下图)?

www.463.com 2

发表评论

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