加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

搞清这些陷阱,NULL和三值逻辑再也不会作妖

发布时间:2019-11-11 11:12:22 所属栏目:编程 来源:youzhibing2904
导读:NULL NULL 用于表示缺失的值或遗漏的未知数据,不是某种具体类型的值。数据表中的 NULL 值表示该值所处的字段为空,值为 NULL 的字段没有值,尤其要明白的是:NULL 值与 0 或者空字符串是不同的。 两种NULL 这种说法大家可能会觉得很奇怪,因为 SQL 里只存

也就是说,yzb 被作为 “与任何人的年龄都不同的人” 来处理了。EXISTS 只会返回 true 或者false,永远不会返回 unknown。因此就有了 IN 和 EXISTS 可以互相替换使用,而 NOT IN和 NOT EXISTS 却不可以互相替换的混乱现象。

还有一些其他的陷阱,比如:限定谓词和 NULL、限定谓词和极值函数不是等价的、聚合函数和 NULL 等等。

总结

1、NULL 用于表示缺失的值或遗漏的未知数据,不是某种具体类型的值,不能对其使用谓词。

2、对 NULL 使用谓词后的结果是 unknown,unknown 参与到逻辑运算时,SQL 的运行会和预想的不一样。

3、 IS NULL 整个是一个谓词,而不是:IS 是谓词,NULL 是值;类似的还有 IS TRUE、IS FALSE。

4、要想解决 NULL 带来的各种问题,最佳方法应该是往表里添加 NOT NULL 约束来尽力排除 NULL。

我的项目中有个硬性规定:所有字段必须是 NOT NULL,建表的时候就加上此约束。

【编辑推荐】

  1. 分分钟解决 MySQL 查询速度慢与性能差
  2. SQL查询语句的执行顺序解析
  3. 微软SQL Server 2019 全新发布,内容亮点都在这里了
  4. 完整的数据库MySQL规范
  5. MySQL数据库基本增删改查操作总结
【责任编辑:武晓燕 TEL:(010)68476606】
点赞 0

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读