搜索

pdf文档 Firebird Null Guide: NULL behaviour and pitfalls in Firebird SQL

479.63 KB 69 页 0 下载 175 浏览 0 评论 0 收藏
所属分类: 数据库 / Firebird
语言 格式 评分
英语
.pdf
3
摘要
文档详细阐述了Firebird SQL中NULL的行为和常见问题。NULL表示未知值,不是空值或零值。在运算中,NULL会传播到整个表达式,导致结果为NULL。在排序时,Firebird 2及以上版本中NULL被视为最小值,可配置为排在首位或末位。文档还讨论了NULL在谓词、聚合函数、主键和外键中的处理方式,以及与用户定义函数(UDFs)的交互。此外,文档指出了不同Firebird版本中NULL的处理差异和相关bug。
AI总结
### Firebird NULL 行为指南总结 #### 1. **NULL 的定义** - **NULL 表示未知**:在 SQL 中,NULL 不是一个具体的值,而是表示某个字段的值未知或不存在。 - **默认状态**:任何未初始化的字段、变量或新插入记录中未提供的字段,默认为 NULL。 - **特殊情况**:NULL 不是空字符串、零或空白值,也不等于这些值。 #### 2. **NULL 在操作中的表现** - **传染性**:将 NULL 用于数值、字符串或日期时间操作时,结果总是 NULL。 - **布尔运算**: - `NULL OR TRUE` 结果为 TRUE。 - `NULL AND FALSE` 结果为 FALSE。 - **比较运算**:任何涉及 NULL 的比较(如 `=`、`<>`)都会返回 NULL。 - **聚合函数**:大多数聚合函数(如 `SUM`、`AVG`)忽略 NULL,但 `COUNT(*)` 包括 NULL。 #### 3. **NULL 在排序中的表现** - **Firebird 1.0**:NULL 总是排在末尾。 - **Firebird 1.5**:支持 `NULLS FIRST` 或 `NULLS LAST`,但默认仍排在末尾。 - **Firebird 2.0 及以上**:NULL 视为“最小值”,默认排在升序的最前或降序的最后。可以通过 `NULLS FIRST` 或 `NULLS LAST` 覆盖默认行为。 #### 4. **NULL 的测试与处理** - **测试 NULL**:使用 `IS NULL` 或 `IS NOT NULL` 来测试表达式是否为 NULL。 - **避免 NULL**:在字段或域定义中使用 `NOT NULL` 禁止 NULL 值。 - **特殊情况**:在 `CASE` 语句、`IF` 语句和 `WHILE` 循环中,如果表达式为 NULL,行为取决于具体语句。 #### 5. **用户定义函数(UDF)中的 NULL 问题** - **意外转换**:部分 UDF 可能会将 NULL 转换为空值(如空字符串或 0),或反之。 - **新方法**:Firebird 2.0 引入了新的 UDF 调用方式,支持 NULL 传递。 #### 6. **NULL 相关的注意事项** - **历史问题**:早期版本存在与 NULL 相关的严重 bug(如排序、`EXTRACT` 函数等),部分已修复。 - **NOT NULL 列**:向已填充表中添加 NOT NULL 列时,新列默认为 NULL,除非指定默认值或触发器赋值。 - **备份还原**:使用 Firebird 2.0 的 `gbak` 工具备份和还原时,NOT NULL 列中的 NULL 值会被正确处理。 #### 7. **总结** - **NULL 的核心**:表示未知,具有传染性。 - **处理原则**: - 明确测试 NULL 使用 `IS NULL`。 - 使用 `COALESCE` 或 `NVL` 将 NULL 转换为具体值。 - 注意排序中的 NULL 处理。 - **版本差异**:不同版本对 NULL 的处理存在差异,需根据具体版本调整行为。 通过理解 NULL 的行为和潜在问题,可以更安全地在 Firebird SQL 中处理涉及 NULL 的表达式和查询。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 62 页请下载阅读 -
文档评分
请文明评论,理性发言.