Firebird Generator Guide: A guide on how and when to use generators in Firebird
169.00 KB
20 页
0 下载
143 浏览
0 评论
0 收藏
所属分类:
数据库 / Firebird
| 语言 | 格式 | 评分 |
|---|---|---|
英语 | .pdf | 3 |
| 摘要 | ||
文档详细介绍了Firebird数据库中的生成器(generator)及其使用方法。生成器是一种线程安全的整数计数器,用于生成唯一标识符。文档解释了生成器与序列(sequence)的关系,说明了如何创建、使用和管理生成器,并讨论了其在不同Firebird版本中的行为差异。内容还涉及生成器的存储位置、事务处理、最大值范围以及如何通过命令行工具和SQL语句操作生成器。 | ||
| AI总结 | ||
### Firebird 生成器指南总结
#### 1. 概述
本文档主要介绍 Firebird 数据库中的生成器(Generators)及其使用方法,旨在帮助用户理解生成器的功能、应用场景以及如何管理它们。生成器类似于其他数据库中的“序列”(Sequence),用于生成唯一的整数序列值。
---
#### 2. 生成器基础
- **什么是生成器?**
生成器是 Firebird 数据库中的一个“线程安全”整数计数器,用于生成唯一值。它类似于编程语言中的变量,但存储在数据库中且独立于事务控制。
- **生成器与序列的关系**
Firebird 中的“序列”(Sequence)是生成器的同义词。两者在功能上完全相同,只是名称不同。推荐在新代码中使用 `SEQUENCE` 语法,因为这是 Firebird 对 SQL 标准的更合规实现。
- **生成器的存储位置**
生成器的定义存储在系统表 `RDB$GENERATORS` 中,而其值存储在数据库的预留页中。用户无法直接访问这些值,必须通过内置函数(如 `GEN_ID`)来操作。
---
#### 3. 生成器的使用
- **创建生成器**
- 客户端 SQL:`CREATE GENERATOR GeneratorName;`
- 推荐语法(Firebird 2 及以上):`CREATE SEQUENCE SequenceName;`
- PSQL 中无法直接在存储过程或触发器中创建生成器。
- **获取当前值**
- 客户端 SQL:`SELECT GEN_ID(GeneratorName, 0) FROM RDB$DATABASE;`
- Firebird 命令行工具 `isql` 支持 `SHOW GENERATOR GeneratorName;` 和 `SHOW GENERATORS;`。
- **生成下一个值**
- 客户端 SQL:`SELECT GEN_ID(GeneratorName, 1) FROM RDB$DATABASE;`
- 推荐语法(Firebird 2 及以上):`SELECT NEXT VALUE FOR SequenceName FROM RDB$DATABASE;`
- **直接设置值**
- 客户端 SQL:`SET GENERATOR GeneratorName TO NewValue;`
- 推荐语法(Firebird 2 及以上):`ALTER SEQUENCE SequenceName RESTART WITH NewValue;`
- **删除生成器**
- 客户端 SQL:`DROP GENERATOR GeneratorName;`
- 推荐语法(Firebird 2 及以上):`DROP SEQUENCE SequenceName;`
---
#### 4. 生成器的高级主题
- **事务与生成器**
生成器独立于事务控制。一旦获取了生成器的值,即使事务回滚,该值也不会恢复。因此,生成器的值被视为“不可回滚”。
- **性能与限制**
生成器的值范围为 64 位整数(-2⁶³ 到 2⁶³ - 1),几乎可以忽略溢出问题。Firebird 数据库的性能不会因生成器数量而显著下降。
- **历史版本的差异**
- 在早期版本(如 InterBase 6 及以下),生成器的数量受数据库页面大小限制。
- Firebird 2 及以上版本支持最多 32767 个生成器。
- **系统表 `RDB$GENERATORS`**
该表包含以下字段:
- `RDB$GENERATOR_NAME`(生成器名称,CHAR(31))
- `RDB$GENERATOR_ID`(生成器 ID,SMALLINT)
- `RDB$SYSTEM_FLAG`(系统标志,1 表示系统生成器,0 或 NULL 表示用户生成器)
- `RDB$DESCRIPTION`(描述,BLOB 类型,仅在 Firebird 2.0 及以上版本支持)
---
#### 5. 使用场景
- **自增字段**
生成器可用于模拟其他数据库的自增字段(如 MySQL 的 AUTO_INCREMENT)。
- **唯一标识符**
生成器常用于生成唯一标识符(如主键值)。
- **控制事务**
生成器可用于控制长-running 存储过程的执行次数。
---
#### 6. 总结
Firebird 的生成器是一种强大的工具,用于生成唯一值和管理序列。通过 `CREATE SEQUENCE`、`ALTER SEQUENCE` 和 `DROP SEQUENCE` 等语法,用户可以轻松创建、修改和删除生成器。生成器独立于事务,因此在使用时需注意其不可回滚的特性。推荐在新代码中使用 `SEQUENCE` 语法,以符合 SQL 标准并提升代码的可读性。 | ||
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余
13 页请下载阅读 -
文档评分













