小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

firebird database (快速入門)

 diamond 2007-09-20
firebird database (快速入門)

參考文件(均可自firebird網(wǎng)站找到):
Novice's Guide
Migration from MS-SQL to firebird
Firebord Release Notes

  1. 學(xué)習(xí)資料庫(kù)基礎(chǔ)是在sql的語(yǔ)法應(yīng)用(請(qǐng)參考:firebird 網(wǎng)站的說明文件最好把這份文件印出來,在寫程式時(shí)可以參考其語(yǔ),雖然大部份都是sql-92相容,但是有差異,還有一些專有的語(yǔ)法)
  2. 當(dāng)你需要的資料找不到時(shí)可以找尋interbase的相關(guān)資料(因?yàn)閒irebird是由 interbase釋放原始碼所衍生的)
  3. 有一本網(wǎng)路上完整的書"BORLAND INTERBASE7.0 應(yīng)用開發(fā)指南 (姚啟紅著)",雖然是interbase但非常詳細(xì),要深入了解(建議必讀)
尚在撰寫中............

目錄索引


前言
它是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等...)
  1. Super Server-無(wú)法直接存取資料庫(kù)檔案,必須透過socket來和伺服器溝通
  2. Classic-直接存取資料庫(kù)的檔案,多個(gè)程式可以同時(shí)存取一個(gè)檔案,有點(diǎn)像vfp,dbase
  3. embedded-專為一些小型系統(tǒng)的嵌入式資料庫(kù) (pda)

下載及安裝
主網(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命令
di[splay]
顯示所有使用者
di[splay] <username>
顯示某使用者
a[dd] <username> -pw <password> [options]
新增使用者
mo[dify] <username> [options]
修改使用者
de[lete] <username>
刪除使用者
h[elp]
求助

同上
q[uit]
離開gsec
z
顯示版本

options
-pa[ssword] <password>
管理者的密碼
-user <username>
使用者名稱
-pw <password>
使用者密碼
-fname <first name>
英文名字有,三個(gè)部份
-mname <middle name>

-lname <last name>


範(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> 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

以上的操作主要是sql指令
命令的結(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;
       RDB$CHARACTER_SETS                     RDB$CHECK_CONSTRAINTS
       RDB$COLLATIONS                         RDB$DATABASE
       RDB$DEPENDENCIES                       RDB$EXCEPTIONS
       RDB$FIELDS                             RDB$FIELD_DIMENSIONS
      ..................                ..................

使用者權(quán)限
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
odbc picture
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)

語(yǔ)法
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ù))

參數(shù) 說明 功能
-b[ackup_database]  備份 備份
-bu[ffers] Set cache size for restored database 回存
-c[reate_database] 回存 (必要參數(shù)) 回存
-co[nvert] 轉(zhuǎn)換外部表格到內(nèi)部表格s 備份
-e[xpand] 建立一個(gè)非壓縮的備份 備份
-fa[ctor] n 磁帶機(jī)的區(qū)塊系數(shù) 備份
-g[arbage collect] 備份時(shí)不清空已刪除的資料 備份
-i[nactive] 所有的索引將回存為INACTIVE 回存
-ig[nore] 備份時(shí)不做checksum錯(cuò)誤檢查 備份
-k[ill] 在不建立定義備份中的shadows 回存
-l[imbo] 備份時(shí)忽略limbo transactions 備份
-m[etadata] 只備份資料表格的metadata (schema).不備份資料 備份
-mo[de] read_write  回存一個(gè) 可讀/寫的資料庫(kù)(預(yù)設(shè)) 回存
-mo[de] read_only 回存一個(gè)唯讀寫資料庫(kù) 回存
-n[o_validity] 不回存validity constraints.也就是回存資料不回存 constraints
回存
-nt 非相容性的格式(只使用在相同作業(yè)平臺(tái),及firebird版本) 備份
-o[ne_at_a_time] 一次回存一個(gè)表格.你可以分別分次回存表格 
回存
-ol[d_descriptions] 舊的格式 備份
-p[age_size] <size> 設(shè)定page size of new database.
 <size> 可以是 1024, 2048, 4096, 8192.預(yù)設(shè)1024. 
回存
-pa[ssword] <password> 資料庫(kù)的密碼  
-r[eplace_database] 回存在一個(gè)存在的資料庫(kù)上.只能在擁有本資料庫(kù)的使用者可以操作
這是覆寫,不要執(zhí)行在使用中的資料庫(kù)!
回存
-role <role> 使用某一群組(role )來連線  
-se[rvice]  <hostname>:service_mgr 備份: 建立,使用服務(wù)管理.
回存: 回存,使用服務(wù)管理.
 
-t[ransportable] 建立可轉(zhuǎn)移的備份(不同作業(yè)系統(tǒng)及firebird版本) 備份
-u[ser] <username> 資料庫(kù)使用者的名字 
 
-use_[all_space] 正常,回存,資料庫(kù)頁(yè)會(huì)填滿80%
唯讀才會(huì)寫回100%(因?yàn)椴挥妙A(yù)留修改的空間)
回存
-v[erbose] 顯示所有g(shù)bak執(zhí)行的詳細(xì)動(dòng)作 
 
-y <filename> 重導(dǎo)所有的輸出到一個(gè)檔案 <filename>.
注意:命令執(zhí)行之前不可以存在檔名
 
-y suppress_output Quiet mode   
-z 顯示版本
 

範(fàn)例:

正常的備份:
gbak -v -t -user SYSDBA -password "masterkey" dbserver:/db/warehouse.fdb c:\backups\warehouse.fbk

備份並記錄所有備份時(shí)的輸出訊息:
gbak -v -t -user SYSDBA -password masterkey -y c:\backups\warehouse.log dbserver:/db/warehouse.fdb c:\backups\warehouse.fbk

正常的回存:
gbak -c -v -user SYSDBA -password masterkey c:\backups\warehouse.fbk dbserver:/db/warehouse2.fdb

回存到一個(gè)已存在的資料庫(kù):
gbak -c -r -v -user SYSDBA -password masterkey c:\backups\warehouse.fbk dbserver:/db/warehouse.fdb

回存一個(gè)唯讀的資料庫(kù):
gbak -c -v -mode read_only -use_all_space -user SYSDBA -password masterkey c:\backups\warehouse.fbk c:\files\warehousedb.fdb

多重檔案?jìng)浞?br>當(dāng)資料庫(kù)很大時(shí),要備份有點(diǎn)困難,因此我們將資料庫(kù)備份成許多小的檔案,如此儲(chǔ)存時(shí)比較方便

備份語(yǔ)法:
gbak [options] <database> <target file 1> <size 1> <target file 2> <size 2> ... <target file n>

注意: 不要指定最後一個(gè)檔案的大小.因我們不一定知道最後一個(gè)檔案需要多少空間來儲(chǔ)存,所以它將自動(dòng)依據(jù)大小來儲(chǔ)存.至於其它檔案的大小可以是 bytes (8192), kilbytes (1024k), megabytes (5m), 或 gigabytes (2g)

回存語(yǔ)法:
gbak -c [options] <source file 1> <source file 2> ... <source file n> <database>

回存到一個(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ù)回存的檔案來變更大小.
Size can be given in bytes (8192), kilbytes (1024k), megabytes (5m), or gigabytes (2g)

由備份多個(gè)檔案回存到多個(gè)檔案的資料庫(kù):
gbak -c [options] <source file 1> <source file 2> ... <source file n> <db file 1> <size 1> <db file 2> <size 2> ... <db file n>


資料庫(kù)安全(備份/ 回存)(gui)
(ibeasy+,參考hlp檔)

選項(xiàng) (Database | Save Database)
backup database

你可以簡(jiǎn)單複製資料庫(kù)檔(如一般的指令copy) 但是無(wú)法確定資料庫(kù)的安全.
優(yōu)點(diǎn):

  • 改善效能經(jīng)由排除不完整的(eliminating incomplete)交易和過期的記錄
  • 減少資料庫(kù)的大小-移除刪除的記錄
  • 獨(dú)立的備份和回存的功能和作業(yè)系統(tǒng)無(wú)關(guān)

執(zhí)行時(shí)必要參數(shù):

  •  資料庫(kù)全名
  • 備份檔案的名稱,可包含大小等特性.
  • The options which must be applied at the time of back up
    - Checksums 檢查資料的完整.
    - End transactions
    - Metadata only 只存結(jié)構(gòu)不存資料.
    - Eliminate garbage 予許釋放舊版本記錄的空間.
    - Old data format
    - Transportable database 可以回存資料庫(kù)到不同的作業(yè)系統(tǒng).
    - Convert to tables 轉(zhuǎn)換外部檔案到內(nèi)部表格.
選項(xiàng): (Database | Restore Database)
resotre database

執(zhí)行這個(gè)操作,必須是這個(gè)資料庫(kù)的擁有者或是有執(zhí)行管理系統(tǒng)的權(quán)限: SYSDBA.
一個(gè)資料備份的資料庫(kù)可以回存
執(zhí)行時(shí)必要參數(shù):

  • 備份檔案的名稱
  • 資料庫(kù)全名
  • 可用的參數(shù)
    - Page size 變更資料庫(kù)每頁(yè)的大小,可以改善效能.說實(shí)在,所有資料庫(kù)在一頁(yè)中會(huì)比較快.
    - Rebuild Indices.  重建索引
    - Create database image Allow the recovery of a database in case of disk crash.
    - Validity conditions Allow when data are not valid any more, following for example a modification of the integrity constraints, to be unaware of the integrity constraints.
    - Commit after each table
    - Replace database In this case, the database must be closed beforehand, and no user must be connected.
    - Create a new database This option is exclusive compared to the preceding option
    - Use all space to recreate the database. By default, at the time of the restoration of a database, the pages are filled out to 80%. This option makes it possible to fill them to 100%.

資料型態(tài)

名稱 大小 範(fàn)圍 /精度 描述
Blob 不固定
blob段大小限於64K 動(dòng)態(tài)變長(zhǎng)度二進(jìn)位類型,用於存放大量資料的情況,如圖片、音樂、視頻、多媒體等。其基本結(jié)構(gòu)單位為段,它的子類型描述了存儲(chǔ)資料的詳細(xì)資訊
Boolean 16位 True
False
Unkown
代表了邏輯上的(真、假、不確定)與Dialect無(wú)關(guān)。
Char(N) n個(gè)字元 1到32767個(gè)位元組。雙字元集除2 固定長(zhǎng)度的字元或字串
Date 64位 從西元後100年一月一日到32768年二月29日 日期類型。只有年月日,不帶時(shí)間
Decimal(P,S) 變數(shù)(16、32或64位) 精度p從1到18:指定數(shù)字的總長(zhǎng)度;標(biāo)度s從0到18:指定小數(shù)點(diǎn)後的位數(shù)。 定點(diǎn)小數(shù)。例如decimal(5,3)可以存儲(chǔ)的數(shù)位形式為:pp.sss
Double Precision 64位 從2.225×10的-308 次方
到1.797×10的308次方
IEEE雙精度浮點(diǎn)數(shù),15位長(zhǎng)度
Float 32位 從1.175×10的-38 次方
到3.402×0的38次方
IEEE單精確度浮點(diǎn)數(shù),7位長(zhǎng)度
Integer 32位 從-2147483648
到2147483647
整數(shù)
Numeric(P,S) 變長(zhǎng)(16、32或64位) 精度p從1到18:指定數(shù)字的總長(zhǎng)度;標(biāo)度s從0到18:指定小數(shù)點(diǎn)後的位數(shù)。 定點(diǎn)小數(shù)。例如decimal(10,3)可以存儲(chǔ)的數(shù)位形式為:ppppppp.sss
Smallint 16位 從-32768到32767 短整數(shù)
Time 64位 從0:00 AM到23:59.9999 PM 時(shí)間類型
Timestamp 64位 從西元後100年一月一日到32768年二月29日 帶有時(shí)間的日期類型
Varchar(N) n個(gè)字元 1到32767個(gè)位元組。字元集決定了其能容納的最大字元數(shù)

#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中的定義
定義
說明
TYPE ("TEXT", 1,nam_f_sub_type)
TYPE ("BLR", 2,nam_f_sub_type)
TYPE ("ACL", 3,nam_f_sub_type)
TYPE ("RANGES", 4,nam_f_sub_type)
TYPE ("SUMMARY", 5,nam_f_sub_type)
TYPE ("FORMAT", 6,nam_f_sub_type)
TYPE ("TRANSACTION_DESCRIPTION", 7,nam_f_sub_type)
TYPE ("EXTERNAL_FILE_DESCRIPTION", 8,nam_f_sub_type)
文字,類似memo,而資料型態(tài)varchar限制 32K
二位元資料(圖片,影音檔等)


1,2是我們常用的,其它的很少使用

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 !!;
create trigger test for test1 active before insert 
as
begin
   new.serial_no=cast(gen_id(test_gen,1) as char(3));
end
!!
set term ; !!
#針對(duì)本身欄位變更方法:觸發(fā)包含了三種sql指令及二種狀態(tài)執(zhí)行前/執(zhí)行後
在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
as
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

#current_date
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í)才可以使用

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多