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

479.63 KB 69 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
本文档详细阐述了Firebird SQL中NULL的行为及相关注意事项,涵盖了NULL的定义、在操作和函数中的处理方式、与NOT NULL的关系,以及历史与当前版本中的相关bug。文档指出了多个版本中NULL处理中的问题,如EXECUTE STATEMENT、EXTRACT、FIRST、SKIP等操作在NULL参数情况下的崩溃问题,及其在不同版本中的修复情况。此外,还介绍了测试NULL的正确方法,以及在布尔操作和数学运算中NULL的返回结果。同时,文档强调了 Firewall SQL在NOT NULL列中NULL值的特殊处理,并列举了涉及NULL的操作和函数的具体行为。
AI总结
《Firebird Null Guide: NULL behaviour and pitfalls in Firebird SQL》文档总结如下: --- ### **1. 什么是NULL?** - NULL表示“未知”或“不存在”的值,是SQL中的一个特殊值。 - 在Firebird中,NULL的处理与其他数据库系统可能存在差异。 --- ### **2. Firebird SQL对NULL的支持** #### **2.1 禁止NULL** - 可以通过在列或域定义中添加`NOT NULL`约束,禁止插入NULL值。 - 示例: ```sql CREATE TABLE MyTable (i INT NOT NULL); CREATE DOMAIN DTown AS VARCHAR(32) NOT NULL; ``` #### **2.2 测试NULL** - 使用`IS [NOT] NULL`语法测试字段或表达式是否为NULL。 - 示例: ```sql SELECT * FROM Pupils WHERE PhoneNumber IS NOT NULL; ``` #### **2.3 赋值NULL** - 使用`=`运算符赋值为NULL。 - 示例: ```sql UPDATE Potatoes SET Amount = NULL WHERE Amount < 0; ``` #### **2.4 测试两个表达式是否相同(Firebird 2+)** - 使用`IS [NOT] DISTINCT FROM`测试两个表达式是否彼此相同,包括NULL的情况。 - 示例: ```sql IF (A IS DISTINCT FROM B) THEN ... ``` --- ### **3. NULL在操作中的行为** #### **3.1 运算操作** - 大多数算术和字符串操作符在至少一个操作数为NULL时返回NULL,包括: - `+`, `-`, `*`, `/` - `<>`, `<`, `<=`, `>`, `>=` - `||`, `BETWEEN`, `LIKE`, `STARTING WITH`, `CONTAINING` #### **3.2 布尔操作** - 布尔操作结果如下: - `NOT NULL = NULL` - `NULL OR FALSE = NULL` - `NULL OR TRUE = TRUE` - `NULL AND FALSE = FALSE` - `NULL AND TRUE = NULL` --- ### **4. 内部函数和指令** #### **4.1 内部函数** - 若至少一个参数为NULL,以下函数返回NULL: - `CAST()`, `EXTRACT()`, `GEN_ID()`, `SUBSTRING()`, `UPPER()`, `LOWER()`, `BIT_LENGTH()`, `CHAR_LENGTH()`, `OCTET_LENGTH()`, `TRIM()` - 注意事项: - `EXTRACT`从NULL日期提取值会在旧版本崩溃,已修复。 - `SUBSTRING`在旧版本中可能返回“假空字符串”,需注意。 #### **4.2 FIRST, SKIP 和 ROWS** - 在旧版本中,`FIRST`和`SKIP`若参数为NULL会导致服务器崩溃,已修复。 - Firebird 2中: - `FIRST`和`SKIP`将NULL视为0。 - `ROWS`若参数为NULL返回空集。 --- ### **5. 谓词** - `SINGULAR`和`NOT SINGULAR`: - 在Firebird 2.0之前,`SINGULAR`可能返回NULL,行为不一致。 - 从2.1起,`SINGULAR`返回: - `FALSE`:如果搜索条件从未满足。 - `TRUE`:如果搜索条件恰好满足一行。 - `FALSE`:如果搜索条件满足多行。 - `NOT SINGULAR`总是返回与`SINGULAR`相反的结果。 --- ### **6. NULL相关Bug** #### **6.1 已修复的Bug** - `EXECUTE STATEMENT` with NULL argument: crash旧版本,已修复。 - `EXTRACT` from NULL date:旧版本crash,已修复。 - `FIRST`和`SKIP` with NULL argument:旧版本crash,已修复。 - `LIKE` with NULL escape:旧版本crash,已修复。 #### **6.2 其他问题** - NULL在`NOT NULL`列中: - 新增`NOT NULL`列时,原有数据字段为NULL。 - 修改列为`NOT NULL`后,原有NULL值保留,但无法通过`gbak`恢复。 - NULL被错误返回为0, '', 等。 --- ### **7. 文档历史** - 文档版本更新记录详见附录,包括新增内容和修复。 --- ### **总结** 文档详细介绍了Firebird SQL中NULL的行为、相关操作、内部函数、谓词及历史和当前的Bug。开发者需特别注意NULL的特殊处理和版本相关的Bug,以避免潜在问题。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 62 页请下载阅读 -
文档评分
请文明评论,理性发言.