我思故我在我有我精彩--liangqihui

爱欲追而情已逝,子欲孝而亲不待。人生的困苦又怎能用一个难字囊尽百味
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

【ZT 】firebird数据库使用

Posted on 2009-06-30 10:18  挥辉  阅读(718)  评论(0编辑  收藏  举报
firebird数据库使用

Firebird特性介绍:firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。它很容易让您从单用户,单数据库升级到企业级的应用。
一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。总之:它是一个开源的,强大在,可以自由使用的数据库(即使是商业上的使用)
关键特性:
支持原子性,并发性,隔离性等概念。
MGA:
支持事务的多个版本功能,
存储过程:
使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表中使用它。
事件:
存储过程和触发器可以引发事件,这个事件可以被客户端程序监听到
生成子:
生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此,它可以用在一个事务中,也可以用在其它很多方面。
只读数据库:
我们可以把数据库存放在CD中,形成一个只读数据库。如果我们的应用程序
也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的
CDLIVE(即只用光盘就可以运行起来)应用。

全事务控制:
一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。
在线备份:
不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。
触发器:
每一个表可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器中写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器中,一次性管理插入,更新,删除的操作。
扩展函数:
我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎中以扩展我们需要的功能
字符集:Firebird实现了很多国际标准的字符集,包括Unicode。
SQL标准兼容:Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。
Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。

◆ isql
这是一个交互式SQL工具,类似于Oracle的SQL*Plus和Postgresql的psql命令。可以使用它来测试和运行SQL查询。

使用CREATE DATABASE命令创建一个数据库,代码如下:

CODE:
SQL>; CREATE DATABASE 'firstdb.gdb' USER 'sysdba' PASSWORD 'masterkey';

该命令将在当前目录下创建一个名为firstdb.gdb的文件。该数据库归SYSDBA所有。下面来创建一个基本的销售表并且输入数据,代码如下:

CODE:
SQL>; CREATE TABLE sales_catalog (
CON>; item_id varchar(10) not null primary key,
CON>; item_name varchar(40) not null,
CON>; item_desc varchar(50)
CON>; );
SQL>; INSERT INTO sales_catalog VALUES('001','Aluminium Wok',
'Chinese wok used for stir fry dishes');
SQL >; INSERT INTO sales_catalog VALUES('002',
'Chopsticks extra-long', '60-cm chopsticks');
SQL>; INSERT INTO sales_catalog VALUES('003',
'Claypot', 'Pot for stews');
SQL>; INSERT INTO sales_catalog VALUES('004',
'Charcoal Stove', 'For claypot dishes');
SQL>; SELECT * FROM sales_catalog;
ITEM_ID ITEM_NAME ITEM_DESC
=============================================
001 Aluminium Wok Chinese wok used for stir fry dishes
002 Chopsticks extra-long 60-cm chopsticks
003 Claypot Pot for stews
004 Charcoal Stove For claypot dishes
 
 
◆ gsec
这是一个安全的系统程序,可以使用命令行的方式来创建、修改和删除数据库用户、改变密码等。必须以SYSDBA来运行gsec,以root身份调用并执行以下命令:

CODE:
$ gsec -user sysdba -password masterkey
将会出现一个GSEC>;提示符,可以使用display命令显示目前的用户,如下所示:

CODE:
GSEC>; display
user name uid gid full name
-----------------------------------
SYSDBA 0 0
缺省的密码不安全,建议更改SYSDBA的密码。可使用以下命令来更改密码

CODE:
GSEC>; modify SYSDBA -pw newpassword
命令中的newpassword即新的密码,密码最好使用数字和字母的组合。

添加用户

不要使用系统管理员账号SYSDBA创建所有的数据库。有些时候,比如在运行多个属于不同用户和组的数据库时,可能希望每个用户和组都有各自的数据库, 并有权查看。另外一种情形需要创建一个代理用户,可以执行所有数据库操作,但其权限都低于SYSDBA。进行这一操作时,需要使用gsec工具。例如,创 建一个用户名为TestAdmin、密码为testadmin的账户(注意,密码的位数只能是8位),并且赋予其查看、修改和删除数据库 firstdb.gdb的权限。使用以下命令来完成这些功能:

CODE:
$ gsec -user SYSDBA -password masterkey
GSEC>; add TestAdmin -pw testadmin -fname FirstDB -lname Administrator
Warning - maximum 8 significant bytes of password used

打开数据库,为数据库创建一个系统管理角色,并为其分配适当的权限,然后运行以下代码:

CODE:
$ isql firstdb.gdb -user SYSDBA -password masterkey
Database: firstdb.gdb, User: SYSDBA
SQL>; GRANT SELECT, UPDATE, INSERT, DELETE ON sales_catalog TO administrator;
SQL>; GRANT administrator TO TestAdmin;
SQL>; quit;

将TestAdmin加至其中。接下来测试数据库。
测试数据库

首先退出gsec和isql,以TestAdmin的身份登录至数据库firstdb.gdb,并运行以下SQL语句:

CODE:
SQL>; DELETE FROM sales_catalog;
SQL>; INSERT INTO sales_catalog VALUES('001', 'Aluminum Wok', 'Chinese wok');
SQL>; INSERT INTO sales_catalog VALUES('002', 'Microwave Oven', '300W Microwave oven');
SQL>; INSERT INTO sales_catalog VALUES('003', 'Chopsticks extra-long', '60cm chopsticks');
SQL>; SELECT * FROM sales_catalog;
ITEM_ID ITEM_NAME ITEM_DESC
===========================================
001 Aluminum Wok Chinese wok
002 Microwave Oven 300W Microwave oven
003 Chopsticks extra-long 60cm chopsticks