当前位置: 56net亚洲必嬴 > 数据库 > 正文

必嬴56netmysql null注意事项

时间:2019-10-24 18:29来源:数据库
转自:http://www.maomao365.com/?p=6873 在mysql中null富含了not null与ifnull或等等,上面作者来给大家介绍在mysql中null的注意事项与运用情势,希望对大家能享有助于。 空值不显然为空 1、什么是

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

在mysql中null富含了not null与if null或等等,上面作者来给大家介绍在mysql中null的注意事项与运用情势,希望对大家能享有助于。

空值不显然为空

1、什么是mysql中的空值,如下图所示

摘要:
下文通过案例剖判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);

  空值是二个相比独特的字段。在mysql教程数据库教程中,在不相同的情事下,空值往往代表分歧的意义。这是mysql数据库的后生可畏种特色。如在平常的字段中(字符型的多寡),空值正是象征空值。不过借使将二个空值的数量插入到timestamp类型的字段中,空值就不自然为空。此时为现身什么样意况吧(如下图)?

必嬴56net 1

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会牺牲……

必嬴56net 2

2、怎么查询呢?

 

是的的答案是怎样?(为了加强影象,建议复制SQL到mysql里去实践,看一下)

  笔者先创设了多个表。在这里个表中有多少个字段:user_id(其数据类型是int)、date(其数据类型是timestamp)。现在往这么些表中插入一条记下,当中往date字段中插入的是一个null空值。可是当我们查询时,其结果展现的却是插入记录的当下光阴。这是怎么一次事呢?其实那便是在mysql数据库中进行sql语句时日常会蒙受的八个骗局:空值不必然为空。在操作时,明明插入的是一个空值的数据,然而最后查询得到的却不是叁个空值。

急需用到is null 和is not null

通过以上测验,我们得以看出not in 查询关键字若是子表中存在空值,则无法查询出其它笔录,会变成非常爆发,
需选用not exists获取相应的空值音信

下边跟大家深入剖判一下缘由:

  在mysql数据库中,null对于一些非常类其余列来讲,其表示了豆蔻梢头种奇特的意义,而不光是二个空值。对于这个新鲜类别的列,各位读者重尽管要记住八个。三个即是小编下边举的timestamp数据类型。假若往这几个数据类型的列中插入null值,则其象征的正是系统的当前些天子。其它三个是两全auto_increment属性的列。倘使往那属性的列中插入null值的话,则系统会插入一个正整数类别。而风度翩翩旦在别的数据类型中,如字符型数据的列中插入null的多少,则其插入的正是一个空值。

必嬴56net 3

必嬴56net 4

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

结果为

编辑:数据库 本文来源:必嬴56netmysql null注意事项

关键词: