澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

Mysql中NULL使用方法与注意事项,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);

  空值是一个比较特殊的字段。在mysql教程数据库教程中,在不同的情形下,空值往往代表不同的含义。这是mysql数据库的一种特性。如在普通的字段中(字符型的数据),空值就是表示空值。但是如果将一个空值的数据插入到timestamp类型的字段中,空值就不一定为空。此时为出现什么情况呢(如下图)?

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会阵亡……

图片 1

 

正确的答案是什么?(为了加深印象,建议复制SQL到mysql里去执行,看一下)

  我先创建了一个表。在这个表中有两个字段:user_id(其数据类型是int)、date(其数据类型是timestamp)。现在往这个表中插入一条记录,其中往date字段中插入的是一个null空值。可是当我们查询时,其结果显示的却是插入记录的当前时间。这是怎么一回事呢?其实这就是在mysql数据库中执行sql语句时经常会遇到的一个陷阱:空值不一定为空。在操作时,明明插入的是一个空值的数据,但是最后查询得到的却不是一个空值。

通过以上测试,我们可以看出not in 查询关键字如果子表中存在空值,则无法查询出任何记录,会导致异常产生,
需使用not exists获取相应的空值信息

下面跟大家分析一下原因:

  在mysql数据库中,null对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列,各位读者主要是要记住两个。一个就是笔者上面举的timestamp数据类型。如果往这个数据类型的列中插入null值,则其代表的就是系统的当前时间。另外一个是具有auto_increment属性的列。如果往这属性的列中插入null值的话,则系统会插入一个正整数序列。而如果在其他数据类型中,如字符型数据的列中插入null的数据,则其插入的就是一个空值。

图片 2

  陷阱二:空值不一定等于空字符

那么在应用中如何避免NULL带来的一些困扰呢?

  在mysql中,空值(null)与空字符(’’)相同吗?答案是否定的。请大家先来看下图的演示。

•把NULL当成一个特殊值,不等于空、0、FALSE,使用IS NULL/IS NOT NULL去检测
•声明NOT NULL列,给于默认值

图片 3

本文由澳门皇冠金沙网站发布于数据库研究,转载请注明出处:Mysql中NULL使用方法与注意事项,null注意事项