|
firebird database (快速入門)
參考文件(均可自firebird網(wǎng)站找到): Novice's Guide Migration from MS-SQL to firebird Firebord Release Notes
目錄索引
前言 它是Borland之前推出interbase資料庫(kù),並將其開放原始碼的免費(fèi)資料庫(kù)軟體,目前版本是1.5.2,它比mysql, postgresql 更適合於windows作業(yè)系統(tǒng),它並不是使用cygwin的方式移植到windows上,而是真正的windows軟體,我們一般將其比較於Ms- sql server,是一個(gè)小而美資料庫(kù),最大的優(yōu)點(diǎn)在於它是免費(fèi)的(ms-sql server五人版至將近三萬(wàn)元),其實(shí)它也支援不同作業(yè)平臺(tái)(含inux),對(duì)於linux上我還是建議大家postgresql或是mysql 因?yàn)閒irebird若要用php的話就有點(diǎn)難了...,你要根據(jù)網(wǎng)站文件來作一些修改編譯的動(dòng)作 #日前postgresql 8.0釋放已經(jīng)支援windwos的原始檔(不使用cygwin來執(zhí)行),但很可惜不支援98/me 因目前還是有人使用win98單機(jī)使用的資料庫(kù),如果你單機(jī)上使用nt系統(tǒng)(2000/xp)等可以使用postgresql,因?yàn)閜ostgresql 比起firebird來講某方面確實(shí)比較強(qiáng),而使用者也比較多 架構(gòu) firebird 資料庫(kù)軟體有三種套件,並而支援不同作業(yè)平臺(tái)(windows系列,linux,freebsd等...)
下載及安裝 主網(wǎng)站:http://firebird./ Download->Firebird relational database 直接點(diǎn)兩下就可以安裝,請(qǐng)照步驟,根據(jù)自己的需求來安裝 預(yù)設(shè)安裝路徑 windows:c:\program files\firebird\firebird_1_5 linux:/opt/firebird 兩個(gè)作業(yè)系統(tǒng)下的目錄結(jié)構(gòu)非常像 根目錄下: firebird.conf-設(shè)定檔 aliases.conf -別名檔 friebird.log -記錄檔 SYSDBA.password -linux才有,管理者的名稱及密碼在裏面,windows則預(yù)設(shè):名稱:sysdba,密碼:masterkey windows直接使用security.fdb來存sysdba的密碼 注意:使用者名稱不分大小寫,但密碼有分 目錄/bin: 則是一些必要的主要及工具程式 設(shè)定 firebird 主要的設(shè)定檔 firebird.conf 預(yù)設(shè)tcp/ip會(huì)啟動(dòng)port:3050 你可以使用telnet ip 3050來測(cè)試 aliases.conf 設(shè)定資料庫(kù)的別名 資料庫(kù)連線時(shí)一般要指定路徑,有時(shí)路徑太長(zhǎng)時(shí)你可以指定,在aliases.conf中使用別名來存取 它是位於你安裝firebird的根目錄,以下為內(nèi)建範(fàn)例 # 別名 = 原始路徑 employee.fdb = /opt/firebird/examples/employee.fdb 其中#為註解,而windows及l(fā)inux的路徑是有所不同: # fbdb1 在Windows伺服器: fbdb1 = c:\Firebird\sample\Employee.fdb # fbdb2 在Linux伺服器: fbdb2 = /opt/databases/killergames.fdb 資料庫(kù)執(zhí)行時(shí)可以編輯這個(gè)檔案,不需要重新啟動(dòng)伺服器 連線別名的方式: Server_name:aliasname 使用者管理(consloe介面) 1.預(yù)設(shè)管理者名稱sysdba,密碼masterkey 2.密碼檔security.fdb,位於firebird安裝目錄下 3.管理程式gsec 安裝目錄下\bin 4.密碼長(zhǎng)度限制在8碼 用法: 本地主機(jī)(資料庫(kù)server在本臺(tái)電腦) gsec -user sysdba -password <password> [options] 遠(yuǎn)端主機(jī)(資料庫(kù)server在別臺(tái)電腦) gsec -user sysdba -password <password> -database <databasename> gsec命令
options
範(fàn)例 有兩種方式 1.直接下在命令列- 2.進(jìn)入互動(dòng)式的命令列-額外的命令 新增使用者 gsec -user sysdba -password masterkey gsec> add elvis -pw elvis -fname elvis -lnmae presley 修改密碼 gsec> modify elvis -pw chunk 修改sysdba密碼 gsec -user sysdba -password masterkey -modify sysdba -pw mykey37 修改遠(yuǎn)端伺服器linux的sysdba密碼 gsec -user sysdba -password masterkey -database harry:/opt/firebird/security.fbd -modify sysdba -pw hamburg 修改遠(yuǎn)端伺服器windows的sysdba密碼 gsec -user sysdba -password masterkey -database sally:"c:\Program files\Firebird\security.fdb" -modify sysdba -pw hannover 修改遠(yuǎn)端伺服器使用tcp port 3050 gsec -user sysdba -password masterkey -database jack/3050:/opt/firebird/security.fdb" -modify sysdba -pw londo 修改遠(yuǎn)端windows伺服器ip( a.b.c.d)使用tcp port 3050 gsec -user sysdba -password masterkey -database a.b.c.d/3050:"c:\program files\firebird\firebird_1_5\security.fdb -modiyf sysdba -pw londo 刪除本地使用者 gsec -user sysdba -password masterkey -delete joe 資料庫(kù)管理(console) 程式isql位於安裝目錄下的bin 以下是一個(gè)操作範(fàn)例: c:\Program files\firebird\firebird_1_5\bin\>isql -user sysdba -password masterkey
Use CONNECT or CREATE DATABASE to specify a database SQL> connect test; Database: test, User: sysdba SQL> show table; COUNTRY CUSTOMER DEPARTMENT EMPLOYEE EMPLOYEE_PROJECT JOB PHONE_LIST PROJECT PROJ_DEPT_BUDGET SALARY_HISTORY SALES SQL> select * from country ; COUNTRY CURRENCY =============== ========== USA Dollar England Pound Canada CdnDlr SQL>quit; 建立資料庫(kù) 1.建立資料庫(kù)create database 2.建立資料表格create table (sql指令) 3.刪除資枓表格drop table (sql指令) 4.查詢資料庫(kù)中所含表格 show table 5.查詢表格中的結(jié)構(gòu) show table 表格名稱 6.新增,刪除,更新(insert,delete,update)均為sql指令 7.SQL命令交付,在新增或刪除時(shí),資料庫(kù)並未直接變更,要使用sql指命c(diǎn)ommit 或commit work來更新 isql -user sysdba -password masterkey Use CONNECT or CREATE DATABASE to specify a database
以上的操作主要是sql指令SQL> create database 'c:\temp\test.fdb'; SQL> create table abc (name char(12),age numeric(3)); SQL> show table friend ; FIRSTNAME CHAR(15) Nullable LASTNAME CHAR(20) Nullable CITY CHAR(15) Nullable STATE CHAR(2) Nullable AGE INTEGER Nullable SQL> insert into abc (name ,age) values( 'cschen',34); SQL> select * from abc; NAME AGE ============ ======= cschen 34 命令的結(jié)尾必需使用";", 如果沒有使用";"提示會(huì)由SQL>變?yōu)镃ON>,告訴你延續(xù)之前的命令 SQL>create table friend
CON>(FIRSTNAME CHAR(13), CON> LASTNAME CHAR(40), CON> STATE CHAR(2), CON> AGE INTEGER ); 同下 SQL>create table friend (FIRSTNAME CHAR(13),LASTNAME CHAR(40),STATE CHAR(2),AGE INTEGER); 每一個(gè)資料庫(kù)有一個(gè)特殊資料庫(kù)-系統(tǒng)資料庫(kù),包含了使用者權(quán)限等... SQL> show system;
使用者權(quán)限RDB$CHARACTER_SETS RDB$CHECK_CONSTRAINTS RDB$COLLATIONS RDB$DATABASE RDB$DEPENDENCIES RDB$EXCEPTIONS RDB$FIELDS RDB$FIELD_DIMENSIONS .................. .................. 1.GRANT 授予使用者權(quán)限 GRANT 權(quán)限 ON 物件 TO 對(duì)象 [with grant option] 2.REVOKE 撤消使用者權(quán)限 REVOKE 權(quán)限 ON 物件 FROM 對(duì)象 權(quán)限:SELECT ,INSERT ,UPDATE,DELETE, ALL 物件:TABLE,VIEW 對(duì)象:使用者,PUBLIC(代表全部) with grant option 讓該名使用者有設(shè)定別的使用者的權(quán)限 *因?yàn)閕sql無(wú)法輸入中文,因此無(wú)法使用在中文輸入資料 *在linux下由於可能會(huì)有同名的isql(unixODBC套件),而linux安裝在/opt/firebird,因此必須使用絕對(duì)路徑來執(zhí)行,另資料庫(kù)的管理者名稱可以不固定,至於密碼在安裝時(shí)會(huì)自動(dòng)產(chǎn)生在檔案SYSDBA.password中 連線方式(檔案/tcpip) 程式支援兩種連線方式 1.使用完整路徑連線 c:\abcd..... 2.使用tcpip連線,在路徑前加主機(jī)的名稱或IP 主機(jī):c:\abcd.... 我們可以根據(jù)切換這兩種 windows 下的路徑如有空白,有時(shí)必須使用" "將路徑框起來才可以用 資料庫(kù)/使用者管理(gui) 我有試過幾個(gè)免費(fèi)的windows端的軟體 選擇ibeasy+: 非常容易管理,必須有資料庫(kù)的觀念 另外可配合marathon使用 ibeasy+使用者管理介面: server->users management ![]() (輸入管理者的名稱及密碼,進(jìn)入下一個(gè)視窗) ![]() (你就可以管理你的使用者) 設(shè)定odbc 在firebird->download ->odbc 下載後安裝 odbc ![]() Database 1.完整路徑-c:\database\abc.fdb 2.tcp/ip-ip:完整路徑(127.0.0.1:c:\database\abc.fdb) 資料庫(kù)的安全(備份/回存)(console) GBAK:命令列工具,命令有兩個(gè)狀態(tài),備份/回存(-b / -c) gbak <options> -user <username> -password <password> <source> <destination> 1.備份 gbak -b <source> 是你要備份的資料庫(kù)來源, <destination>是備份的目的地檔名.一般的延伸附檔名 是 .fbk . 只有SYSDBA 或是資料庫(kù)的擁有者可以執(zhí)行備份工作. 對(duì)於多個(gè)檔案的資料庫(kù),只需指定第一個(gè)檔案的名稱來當(dāng)資料庫(kù)的名稱. 2.回存 gbak -c <source> 是先前備份的檔案而<destination> 是資料庫(kù)的名稱 選項(xiàng) (中括號(hào)內(nèi)的是非必要,也就是命令可以使用中括號(hào)前的縮寫,或是含中括號(hào)內(nèi)為長(zhǎng)參數(shù))
範(fàn)例: 正常的備份: 備份並記錄所有備份時(shí)的輸出訊息: 正常的回存: 回存到一個(gè)已存在的資料庫(kù): 回存一個(gè)唯讀的資料庫(kù): 備份語(yǔ)法: 注意: 不要指定最後一個(gè)檔案的大小.因我們不一定知道最後一個(gè)檔案需要多少空間來儲(chǔ)存,所以它將自動(dòng)依據(jù)大小來儲(chǔ)存.至於其它檔案的大小可以是 bytes (8192), kilbytes (1024k), megabytes (5m), 或 gigabytes (2g) 回存語(yǔ)法: 回存到一個(gè)多個(gè)檔案的資料庫(kù) 有些系統(tǒng)的檔案系統(tǒng)有限制,或是為了效能的因素,因此單一資料庫(kù),可分成多個(gè)小的資料庫(kù)gbak -c [options] <source file> <db file 1> <size 1> <db file 2> <size 2> ... <db file n> 注意:不要指定最後資料庫(kù)的大小.它可以無(wú)限制的依據(jù)回存的檔案來變更大小. 由備份多個(gè)檔案回存到多個(gè)檔案的資料庫(kù): 資料庫(kù)安全(備份/ 回存)(gui) 選項(xiàng) (Database | Save Database) 你可以簡(jiǎn)單複製資料庫(kù)檔(如一般的指令copy) 但是無(wú)法確定資料庫(kù)的安全.
執(zhí)行時(shí)必要參數(shù):
![]() 執(zhí)行這個(gè)操作,必須是這個(gè)資料庫(kù)的擁有者或是有執(zhí)行管理系統(tǒng)的權(quán)限: SYSDBA.
#Blob blob sub_type segment 這是一個(gè)特有的資料型態(tài),是用於儲(chǔ)存比較大量的資料,類似其它資料庫(kù)的text或是memo資料型態(tài),在定義時(shí)有兩個(gè)附加參數(shù)是sub_type, segment sub_type是blob的資料類型,以下是它的types.h中的定義
generator(計(jì)數(shù)器) 計(jì)數(shù)器可以我們幫助產(chǎn)生循序的數(shù)字,你可以將其看成如一個(gè)公共變數(shù),使用gen_id(generator名稱,step)來取得一個(gè)值並加step create generator my_gen num=gen_id(my_gen,1) 則 num 問題 如果純粹使用generator來填入,如果是uniqe或primary key,當(dāng)generator最大值是264(18446744073709551616) 如果超過會(huì)重回到0 由於generator的最大值264 是很大數(shù)字要產(chǎn)生重複的機(jī)率很小 要不要使用日期來配合產(chǎn)生? 如果配合日期則會(huì)產(chǎn)生重複的機(jī)率會(huì)減少(發(fā)票,傳票等) 年月日+流水號(hào) 20040303004 而generator 只要產(chǎn)生流水號(hào),但是流水號(hào)每天都是從1開始,並且一般會(huì)限制數(shù)字的寬度如四位數(shù)或三位數(shù) 如此造成重複性會(huì)增加 目前資料庫(kù)並無(wú)法處理這個(gè)問題,你必須自己設(shè)計(jì)一個(gè)表格來儲(chǔ)存這個(gè)值,配合sql指令來取得最後的值 (建議:不要浪費(fèi)時(shí)間在使用在資料庫(kù)端的解決方法) 填入的欄位要字串或是數(shù)字? 如果是單獨(dú)使用generator,最好是用數(shù)字的格式比較好 #注意:integer只有32位元 範(fàn)例: 自動(dòng)展示 create generator test_gen ; CREATE TABLE test1 (serial_no char(3) not null primary key,name char(15)); 建立觸發(fā)來自動(dòng)取得ID(new.欄位名稱 ,這個(gè)變數(shù)是可以被sql指令時(shí)自動(dòng)引用) set term ; !! 在insert的執(zhí)行前,所有的插入到被觸發(fā)的表格的欄位,你可以使用 new.欄位名稱來存取,只要變更該值就可以自動(dòng)變更新增到表格中的欄位值 #在建立trigger 時(shí)由於trigger中的;(分號(hào))會(huì)混淆結(jié)束符號(hào),因此使用sql指令或在isql中新增trigger請(qǐng)變更其結(jié)尾符號(hào),是set term 結(jié)尾符號(hào),預(yù)設(shè)的結(jié)尾符號(hào)";",因此做完要復(fù)原set term ;!! 流水號(hào) 每日重置流水號(hào) 使用表格欄位來記錄日期,檢查若日期不同則寫入新日期並將generator歸零(set generator 名稱 to 0),但無(wú)法使用在儲(chǔ)存函式中 在新增之前觸發(fā)這個(gè)功能,比上述更簡(jiǎn)單(尚未測(cè)試) create trigger test2 for test active before insert
#current_dateas declare variable temp_date date; declare variable serial_no char(3); begin if current_date==t_date then #取得流水號(hào) serial_no=cast(gen_id(generator名稱,1) as char(3)); else #將流水號(hào)置為0,使用相減 =GEN_ID(My_Generator, -GEN_ID(My_Generator)) #取得流水號(hào) endif end select current_date from rdb$database 儲(chǔ)存函式或觸發(fā)呼叫其它的儲(chǔ)存函式 execute procedure 名稱[(變數(shù)1,變數(shù)2....)] [RETURNING_VALUES [(變數(shù)1,變數(shù)2.....)]] 最簡(jiǎn)單的呼叫(不傳值,也不傳回值)直接執(zhí)行 EXECUTE PROCEDURE 名稱 測(cè)試函式的執(zhí)行或 GENERATOR的結(jié)果 1.建立一個(gè)GENERATOR CREATE GENERATOR TESTGEN 2.建立一個(gè)儲(chǔ)存函式(只是將GENERATOR加一) create procedure TEST as DECLARE VARIABLE MY FLOAT; BEGIN MY=GEN_ID("TESTGEN",1); END 3.直接執(zhí)行命令 EXECUTE TEST 4.查詢GENERATOR是不是變?yōu)? 變數(shù) 函式中自己宣告的區(qū)域變數(shù) 1.直接引用-不需任何前置符號(hào) 2.用在sql語(yǔ)法中-必須前置: 記錄使用者 CURRENT_USER 和 CURRENT_ROLE 時(shí)間變數(shù) current_time,current_date,current_timestamp udf自定函式的內(nèi)建函式 預(yù)設(shè)有內(nèi)建函式放在在安裝目錄下的udf 中含有的函式資訊在fbudf.sql、ib_udf.sql,但真正函式是在fbudf.dll、ib_udf.dll 在firebird中使用者自定函式,和其它的sql-server有很大的不同 在firebird中udf一般是以c或c++寫成函式,然後編譯成為模組 1.windows- .dll檔 2.linux - .so 檔 再來將其放在安裝目錄的UDF目錄下,一般會(huì)將其宣告檔放在同一目錄下,如果不是放在預(yù)設(shè)的目錄下,你必須在firebird的環(huán)境檔中設(shè)定,但是會(huì)有安全的問題. 如果你不會(huì)也不想寫自定函式,但是想要用別人寫好的函式 要使用宣告命令 declare external function 其語(yǔ)法如下: declare external function '名稱' 傳入的變數(shù)型態(tài)列表 returns 回傳變數(shù)型態(tài) FREE_IT entry_point '函式名稱' '模組名稱'; 如果你不知道有那些函式可以使用,可以參考UDF目錄下的.sql 以下是完整抄自ib_udf.sql DECLARE EXTERNAL FUNCTION ltrim CSTRING(255) RETURNS CSTRING(255) FREE_IT ENTRY_POINT 'IB_UDF_ltrim' MODULE_NAME 'ib_udf'; 你必須在isql連線資料庫(kù)完畢後執(zhí)行上述的命令(或其它管理程式),則該函式就會(huì)隨資料庫(kù)可以被呼叫使用, FREE_IT是在函式傳回值之後清掉所配置的記憶體. 個(gè)人認(rèn)為目前client所提供的函式遠(yuǎn)多於server端,因此除非必要否則儘量使用client端的函式 #ibeasy++不提供UDF的管理 #marthon提供 安全性(建立多個(gè)資料庫(kù)備份檔) create shadow 一旦使用上述命令則會(huì)建立一個(gè)同步的資料庫(kù)在其它的儲(chǔ)存設(shè)備上,這可以保障當(dāng)資料庫(kù)邏輯或?qū)嶓w的儲(chǔ)存介面損壞時(shí),有一個(gè)備份的資料庫(kù)可以即時(shí)取代 重建索引 alter index 索引名稱 inactive alter index 索引名稱 active 上述命令可以用在重建索引,或是資料庫(kù)回存時(shí)想要加速其執(zhí)行速度,不要回存時(shí)邊回存邊建立索引,先執(zhí)行inactive則回存時(shí)索引會(huì)失去作用,等資料庫(kù)回存完畢時(shí)再執(zhí)行active的動(dòng)作,則會(huì)重建索引,當(dāng)然只有在沒有人使用該資料庫(kù)時(shí)才可以使用 |
|
|