Firebird Cookbook 3:表管理
Firebird没有如同MySQL那样的表克隆能力,如果想要创建一个元信息一致的表,只能直接复制DDL。此外,Firebird也不支持客户端在会话中创建临时表。但是,Firebird提供了全局临时表功能。
4.1 全局临时表
全局临时表的元信息是持久化的,而数据则可以局限于当前事务或连接:
CREATE GLOBAL TEMPORARY TABLE GTT_STUDENTS (...) ON COMMIT DELETE / PRESEVE ROWS;
DELETE和PRESERVE分别对应事务临时表和连接临时表。全局临时表绝大部分特性和普通表是一样的,除了:
(1)临时表和普通表不能互相引用。
(2)临时表之间只能引用同类型的表(事务引用事务,连接引用连接)。
(3)临时表在生命终止、销毁数据的时候不会触发BEFORE/AFTER型触发器。
4.2 存储查询数据
可以在INSERT中使用SELECT子语句来实现:
INSERT INTO STUDENTS (SID, SNAME) SELECT SID, SNAME FROM TEMP;
4.3 备份
bin目录下的gbak工具可以提供数据备份功能。
# 创建备份
gbak /path/to/db/SOME.FDB /path/to/backup/BACKUP.BAK -USER user_name -PAS pwd
# 恢复数据
gbak /path/to/backup/BACKUP.BAK /path/to/db/RESTORE.FDB -C -USER user_name -PAS pwd
其它一些开关包括:
(1)-M:只备份、恢复元信息
(2)-NOD:恢复数据过程中不调用触发器
(3)-REP:覆盖已经存在的文件