FIREBIRD使用经验总结
### FIREBIRD使用经验总结 #### 一、简介与安装注意事项 FIREBIRD数据库管理系统是一种高性能、开源的关系型数据库系统。它具有丰富的功能集,适用于各种应用开发环境。相较于其他商业数据库如Microsoft SQL Server(MSSQL)或MySQL等,FIREBIRD在资源占用上更轻量级,安装包大小仅为2.3MB左右,而MSSQL即使是最小安装也需要70MB以上加上服务包SP3,MySQL的安装包也在20-30MB之间。这种轻量化的特点使得FIREBIRD成为小型项目或资源受限环境下的理想选择。 **安装注意事项**: 1. **访问UDF库权限问题**:有时可能会遇到服务器管理员拒绝访问“rfunc.dll”库的情况。解决方法是将该库文件放置于FIREBIRD的`bin`目录或系统路径`windows\system32`下。如果问题仍然存在,尝试重新安装FIREBIRD并确保正确配置UDF库路径。 #### 二、语法差异与转换 FIREBIRD与MSSQL在SQL语法上存在一些差异,这些差异在进行数据迁移时需要特别注意。 1. **事务处理**:FIREBIRD不支持SQL Server中的`BEGIN TRANSACTION`和`COMMIT TRANSACTION`语句。在FIREBIRD中,可以使用以下方式开启和提交事务: - 开启事务:`pFIBDtbsMain.StartTransaction;` - 提交事务:`pFIBDtbsMain.Commit;` 2. **变量声明与赋值**:FIREBIRD中变量的声明和赋值与MSSQL有所不同。例如,获取表中记录数量的语句如下所示: - MSSQL: `SELECT @i = COUNT(*) FROM table1;` - FIREBIRD: `SELECT COUNT(*) FROM table1 INTO :i;` 3. **子查询**:FIREBIRD支持多种子查询结构,包括`EXISTS`和`IN`子查询。例如: - `SELECT * FROM table WHERE EXISTS (SELECT * FROM other_table);` - `SELECT * FROM table WHERE column IN (SELECT value FROM other_table);` 4. **条件表达式**:FIREBIRD支持`CASE`语句,但其语法略有不同: - MSSQL: `SELECT field = CASE WHEN condition THEN value ELSE default END;` - FIREBIRD: `SELECT CASE WHEN condition THEN value ELSE default END AS field;` 5. **日期时间操作**:FIREBIRD中日期时间操作的方式与MSSQL略有区别: - MSSQL: `SELECT * FROM snartleave WHERE dt_starttime < GETDATE();` - FIREBIRD: `SELECT * FROM snartleave WHERE dt_starttime < CURRENT_DATE + CURRENT_TIME;` #### 三、存储过程与序列管理 1. **存储过程创建**:FIREBIRD支持存储过程,可以通过如下方式定义: ```sql CREATE PROCEDURE SPVARTST2(VAR_IPTARTNO CHAR(6)) RETURNS (VAR_ARTNAME CHAR(10)) AS BEGIN FOR SELECT v_name1 FROM snart WHERE v_artNo = :var_iptartno INTO :var_artname DO SUSPEND; END ``` 2. **自动增长字段**:FIREBIRD中自动增长字段的实现与MSSQL有所不同,采用`GENERATOR`机制: - 在插入新记录时,如果没有提供序列号,则自动生成: ```sql IF (new.i_seqno IS NULL) THEN BEGIN NEW.i_seqno = GEN_ID(GEN_T_DB_ARTSEQNO_ID, 1); END ``` - 初始化`GENERATOR`值: ```sql AGENERATOR = Gen_ID(GEN_T_DB_ARTSEQNO_ID, Gen_ID(GEN_T_DB_ARTSEQNO_ID, 0) * -1 + 1); ``` #### 四、数据更新与查询优化 1. **联合查询**:FIREBIRD中更新表时可以使用嵌套查询来替代MSSQL中的内连接语法: - MSSQL: `UPDATE table1 SET cname = b.cname FROM table1 a INNER JOIN table2 b ON a.id = b.id;` - FIREBIRD: `UPDATE table1 a SET cname = (SELECT cname FROM table2 b WHERE a.id = b.id);` 2. **限制结果集大小**:FIREBIRD中使用`FIRST`关键字限制返回行数,类似于MSSQL中的`TOP`: - MSSQL: `SELECT TOP 10 * FROM table1;` - FIREBIRD: `SELECT FIRST 10 * FROM table1;` #### 五、性能调优与最佳实践 1. **数值汇总**:FIREBIRD提供了多种函数用于数值汇总计算,如`COALESCE()`函数可以有效处理NULL值问题: ```sql UPDATE achieve SET total = coalesce(yuwen, 0) + coalesce(shuxue, 0) + coalesce(yingyu, 0); ``` 2. **事务管理**:正确地使用事务可以提高应用程序的性能和数据一致性。FIREBIRD中提供了简单易用的事务管理API。 通过上述总结,我们可以看到FIREBIRD作为一种轻量级的数据库管理系统,在很多方面都有其独特的优势。对于开发者来说,熟悉并掌握这些特点可以帮助更好地利用FIREBIRD的强大功能。
最近在改写一段ms sql的存储过程到firebird,总结了一些经验,firebird可以说是这个世界上最小的又支持存储过程的数据库的,才2.3M而已,如果做小型的应用,比ms sql桌面版也有70多M(+sp3),mysql也有20-30M,太不方便。
1.自定义函数问题.Access to UDF library "rfunc.dll" is denied by server administrator花了很长时间,不明白为何,将rfunc.dll拷到udf目录,bin目录,windows\system32目录都不能解决问题,google一下,网上有同样的问题,但没有解决方案,结果我重装了一下firebird就解决了.
2.存储过程中变量的定义 ms sql存储过程中无论在哪都可以定义新的变量,但在firebird中,只能在as 与begin之间进行定义.firebird的变量不能用@符号,我将@全部变成a就好了.
3.存储过程中变量的使用
select @i=count(*) from table1 //ms sql
select count(*) from table1 into :i//firebird引用变量使用冒号
4.嵌入式sql,
firebird支持select * from table exists (select ...) 或 select * from table in (select ...)
但不支持select * from (select * from ...) a,我是将这类改写成视图解决的
5.case语句
mssql 可使用field= case (),但firebbird仅支持case () as field
6.mssql getdate()变成CURRENT_DATE+CURRENT_TIME
select * from snartleave where dt_starttime<CURRENT_DATE+CURRENT_TIME
select * from snartleave where dt_starttime<CURRENT_DATE||' ' ||CURRENT_TIME
7.返回数据集的存储过程写法(firebird写法有点麻烦)
CREATE PROCEDURE SPVARTST2 (
VAR_IPTARTNO CHAR(6))
RETURNS (
VAR_ARTNAME CHAR(10))
AS
begin
- 若现2012-03-20就是《FIREBIRD 学习资料》,换了个名字而已嘛。
- leechung2013-06-25非常实用的资料
- 鬼头猫2013-02-01挺不错的,非常实用的资料
- chzhpi2013-07-13太简单,用处不是很大,对初学者有帮助
- 粉丝: 3
- 资源: 22
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 19 工资发放明细表-可视化图表.xlsx
- 27 员工工资表(图表分析).xlsx
- 23 财务报告工资数据图表模板.xlsx
- 22 财务报告工资数据图表模板.xlsx
- 24 工资表-年度薪资可视化图表.xlsx
- 26 财务分析部门工资支出图表.xlsx
- Python爬虫技术详解:从基础到实战.zip
- 25 工资费用支出表-可视化图表.xlsx
- 30公司各部门工资支出数据图表1.xlsx
- 29 员工月度工资支出数据图表.xlsx
- 28 工资表(自动计算,图表显示).xlsx
- 31 财务分析工资年度开支图表.xlsx
- 33 年度工资预算表(可视化看板).xlsx
- 32 公司年度工资成本数据图表.xlsx
- 34 年度工资汇总-数据可视化看板.xlsx
- 36 财务报表新年度部门工资预算表.xlsx