B.5.4.3 NULL值问题
来源:互联网 发布:python 开发GIS 编辑:程序博客网 时间:2024/06/05 21:18
原文:https://dev.mysql.com/doc/refman/5.7/en/problems-with-null.html
B.5.4.3 NULL值问题
对新手来说,“NULL值”一个常见的难以理解的问题,经常被认为是空字符串”,实际上这两者并不等同。比如,下面的语句是完全不同的:
mysql> INSERT INTO my_table (phone) VALUES (NULL);mysql> INSERT INTO my_table (phone) VALUES ('');
这两个语句都向phone列插入了一个值,但是第一个插入了一个NULL值,第二个插入了一个空字符串。第一个语句可以理解为“不知道手机号”,第二个可以理解为“这个人没有手机,当然也就没有手机号了”。
你可以使用IS NULL 和 IS NOT NULL 操作符, 和 IFNULL() 函数来处理NULL值.
在SQL里,NULL值和其它任何值比较都不会返回true,包括两个NULL值比较。一个含NULL的表达式产生的结果一般情况下仍是NULL值,除非在表达式中使用了其它操作符或函数。下面列子的都有列的结果都是NULL.
mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
如果要查找列为NULL的数据,你不能使用 “expr = NULL”,这样不会返回任何结果,因为“expr = NULL”在任何表达式中结果都不会是true:
mysql> SELECT * FROM my_table WHERE phone = NULL;
为了找到NULL值,你必须使用“IS NULL”.下面的列子演示了怎样查找一个手机号是NULL的数据和手机号为空的数据:
mysql> SELECT * FROM my_table WHERE phone IS NULL;mysql> SELECT * FROM my_table WHERE phone = '';
更多的信息和例子,请查看Section 3.3.4.6, “Working with NULL Values”。
如果你使用的是MyISAM, InnoDB, or MEMORY存储引擎,你可以对NULL值的列建立索引。其它引擎只能在声明非NULL的列上建立索引。
当使用LOAD DATA INFILE读取数据时,列值为空或不存在的列会更新为”;文件中列值为\N的,会插入NULL值,在有些情况下也可以直接在文本中使用NULL。具体信息请查看”LOAD DATA INFILE Syntax”
当使用DISTINCT, GROUP BY, or ORDER BY时,所有的NULL值都认为是相等的。
当使用ORDER BY,NULL值会排在最前面;当使用DESC倒序排序时,NULL值会排在最后。
像COUNT(), MIN(), and SUM()这样的聚合函数,计算时会忽略NULL值。但count(*)是个例外,它不是按列值统计,而是按表的行数统计。比如,下面的sql会产生两个统计值,第一个是表的行数,第二个是age列非NULL值的个数:
mysql> SELECT COUNT(*), COUNT(age) FROM person;
在某些数据类型时,MySQL对NULL值会特殊处理。如果你向一个TIMESTAMP列插入NULL值,实际会插入一个当前的日期和时间的值。如果你向一个有AUTO_INCREMENT属性的整数或浮点类型的列插入NULL值,实际上会插入自增序列的下一个值。
- B.5.4.3 NULL值问题
- oracle之简null空值问题,用nvl(a,b)函数解决
- mysql null 值问题
- DBUnit NUll值问题
- mysql null值问题
- ORACLE null值比较问题
- mysql NULL 值求和问题
- left join NULL 值问题
- iReport中的NULL值问题
- Mysql的NULL值问题
- b is null
- oracle练习3-关于null值的问题
- oracle中的空值问题2 -- null!=null
- 关于TreeMap集合存取null键null值问题详解
- Count 和 NULL值 造成的问题
- NULL 值处理遇到的错误问题.
- Oracle中NULL值相关问题
- Mysql插入NULL值的问题
- & 和 &&的区别和联系
- java中Cookie类详解
- 几条关于java程序设计风格的指导性建议
- 其他题目---一种字符串和数字的对应关系
- 使用idea 提代码
- B.5.4.3 NULL值问题
- Spring Boot Actuator 常用端点及描述
- Python每日小结(五)
- python文件地址问题
- Ubuntu16.04下面spyder切换虚拟环境下面的python版本
- 在窗体中新建控件的方法
- github远程仓库上传项目二
- spark学习02之app流量统计并排序(JAVA)
- SQL的check不能用于mysql时的另一种处理