设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2019-11-07 20:19 所属栏目:115 来源:youzhibing2904
导读:也就是说,yzb 被作为 与任何人的年龄都不同的人 来处理了。EXISTS 只会返回 true 或者false,永远不会返回 unknown。因此就有了 IN 和 EXISTS 可以互相替换使用,而 NOT IN和 NOT EXISTS 却不可以互相替换的混乱现

也就是说,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

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读