Firebird数据库相关操作

Firebird常用SQL 
一、分页写法小例:

1 select first 10 templateid,code,name from template ;
2 select first 10 skip 10 templateid,code,name from template ;
3 select from shop rows to 10; --firebird2.0支持这种写法

二、show
 

1 show tables;
2  show table tablename;

三、
 D:\firebird2\bin>isql -u sysdba -p masterkey
 connect "E:\company\xmwsoft\newxmwsoft\c2\db\cts2.fdb";
四、--更新字段注释

1 update RDB$RELATION_FIELDS
2 set RDB$DESCRIPTION = ‘描述信息‘
3 where (RDB$RELATION_NAME = ‘SHOP‘and
4 (RDB$FIELD_NAME = ‘CREDIT_BUY‘)

五、--显示字段注释

1 select RDB$FIELD_NAME,RDB$DESCRIPTION from RDB$RELATION_FIELDS
2 where (RDB$RELATION_NAME = ‘SHOP‘)
3 and
4 (RDB$FIELD_NAME = ‘CREDIT_BUY‘)

六、--更新表注释

1 update RDB$RELATIONS set RDB$DESCRIPTION = ‘描述信息‘ where RDB$RELATION_NAME=‘TABLE_NAME‘

七、--查询所有的表和视图(包括系统表和系统视图)

1 SELECT RDB$RELATION_NAME FROM RDB$RELATIONS;

八、--查询所有的用户表和用户视图

1 SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0;

九、--查询所有的用户表

1 SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$VIEW_BLR IS NULL

十、查所有用户表、用户视图所有字段及相关定义

01 SELECT a.RDB$RELATION_NAME, b.RDB$FIELD_NAME, b.RDB$FIELD_ID, d.RDB$TYPE_NAME,
02  c.RDB$FIELD_LENGTH, c.RDB$FIELD_SCALE
03  FROM RDB$RELATIONS a
04  INNER JOIN RDB$RELATION_FIELDS b
05  ON a.RDB$RELATION_NAME = b.RDB$RELATION_NAME
06  INNER JOIN RDB$FIELDS c
07  ON b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME
08  INNER JOIN RDB$TYPES d
09  ON c.RDB$FIELD_TYPE = d.RDB$TYPE
10  WHERE a.RDB$SYSTEM_FLAG = 0
11  AND d.RDB$FIELD_NAME = ‘RDB$FIELD_TYPE‘
12  ORDER BY a.RDB$RELATION_NAME, b.RDB$FIELD_ID

十一、查找某表的所有字段及相关定义

1 SELECT A.RDB$FIELD_NAME, B.RDB$FIELD_TYPE, B.RDB$FIELD_LENGTH, B.RDB$FIELD_PRECISION, B.RDB$FIELD_SCALE
2  FROM RDB$RELATION_FIELDS A, RDB$FIELDS B
3  WHERE A.RDB$RELATION_NAME = ‘tablename‘
4  AND A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME
5  ORDER BY A.RDB$FIELD_POSITION

十二、查找某表的主键定义字段

1 select A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B
2  WHERE B.RDB$CONSTRAINT_TYPE = ‘PRIMARY KEY‘
3  AND B.RDB$RELATION_NAME = ‘tablename‘
4  AND A.RDB$INDEX_NAME = B.RDB$INDEX_NAME
5  ORDER BY A.RDB$FIELD_POSITION

十三、查找某表的外键定义

1 select r1.RDB$CONSTRAINT_NAME, rind.RDB$FIELD_NAME, r2.RDB$RELATION_NAME
2  FROM RDB$RELATION_CONSTRAINTS r1, RDB$RELATION_CONSTRAINTS r2, RDB$REF_CONSTRAINTS ref, RDB$INDEX_SEGMENTS rind
3  where r1.RDB$RELATION_NAME = ‘tablename‘
4  and r1.RDB$CONSTRAINT_TYPE = ‘FOREIGN KEY‘
5  and r1.RDB$CONSTRAINT_NAME = ref.RDB$CONSTRAINT_NAME
6  and ref.RDB$CONST_NAME_UQ = r2.RDB$CONSTRAINT_NAME
7  and r1.RDB$INDEX_NAME = rind.RDB$INDEX_NAME

firebird默认的用户名:SYSDBA 密码:masterkey

开源的Firebird的可视化管理工具Marathon
flameRobin也量个开源的可视化管理工具
1、创建表

01 CREATE TABLE table_name
02 (
03     column_name {< datatype> | COMPUTED BY (< expr>) | domain}
04         [DEFAULT { literal | NULL USER}] [NOT NULL]
05     ...
06     CONSTRAINT constraint_name
07         PRIMARY KEY (column_list),
08         UNIQUE      (column_list),
09         FOREIGN KEY (column_list) REFERENCES other_table (column_list),
10         CHECK       (condition),
11     ...
12 );

如:create table t1
(
    sno1 char(9) primary key,
    sno2 char(9) references student(sno)    
)
2、修改表
(1)增加字段
alter table table_name add fieldname datetype [not null ,primary key]
如:alter table student add sex char(2) not null 
    primary key 
    default ‘m‘ 
    CHECK (sex1=‘f‘ or sex1=‘m‘)

ALTER TABLE STUDENT
ADD AGE INTEGER[1:100]
DEFAULT 56 
CHECK (age between 20 and 35)

ALTER TABLE STUDENT
ADD AGE INTEGER[1:100]
DEFAULT 56 
CHECK (age>=20 and age<=35) 
(2)删除字段
alter table table_name drop fieldname
ALTER TABLE STUDENT DROP AA
(3)增加主键
alter table SCORE
add constraint PK_SCORE_1
primary key (ID, CORUSENAME)
////////////////////////////////////////////////////////////////////////////
查询:
SELECT [TRANSACTION transaction]
[DISTINCT | ALL]
{* | <val> [, <val> …]}
[INTO :var [, :var …]]
FROM <tableref> [, <tableref> …]
[WHERE <search_condition>]
[GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]
[HAVING <search_condition>]
[UNION <select_expr> [ALL]]
[PLAN <plan_expr>]
[ORDER BY <order_list>]
[FOR UPDATE [OF col [, col …]]];

在表上增加外键
alter table STUDENT
add constraint FK_STUDENT_1
foreign key (ID) 
references SCORE (ID)
///////////////////////////////////////////////////////////////////////
创建域:
CREATE DOMAIN domain [AS] <datatype>
[DEFAULT {literal | NULL | USER}]
[NOT NULL] [CHECK (<dom_search_condition>)]
[COLLATE collation];  
如:
(1)create domain  MyScore  as SMALLINT
default 0
check(value between 0 and 100)
(2)CREATE DOMAIN DEPTNO AS CHAR(3)
     CHECK ((VALUE = ‘000‘) OR 
    (VALUE > ‘0‘ AND VALUE <= ‘999‘) 
    OR (VALUE IS NULL))
修改域:
ALTER DOMAIN name {
SET DEFAULT {literal | NULL | USER}
| DROP DEFAULT
| ADD [CONSTRAINT] CHECK (<dom_search_condition>)
| DROP CONSTRAINT | new_col_name

| TYPE datatype};
如:
(1)alter DOMAIN DAGE TYPE INTEGER
(2)alter DOMAIN DAGE TYPE INTEGER
set DEFAULT 40
add constraint CHECK (value  between 10 and 90)
(3)alter DOMAIN DAGE TYPE INTEGER
drop   CONSTRAINT
(4)CREATE DOMAIN prodtype
    AS VARCHAR(12)
    DEFAULT ‘software‘ NOT NULL
    CHECK (VALUE IN (‘software‘, ‘hardware‘, ‘other‘, ‘N/A‘));
问题:不知道{USER}是什么意思,怎么用?

连接到数据:
CONNECT ‘filespec‘ [USER ‘username‘][PASSWORD ‘password‘]
[CACHE int] [ROLE ‘rolename‘]
如:
connect g:\firebird\test.fdb user ‘sysdba‘ password ‘masterkey‘;//一定要加上‘;’以表示sql语句结束。

创建索引:
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX index
ON table (col [, col …]);
创建视图:
CREATE VIEW name [(view_col [, view_col …])]
AS <select> [WITH CHECK OPTION];

创建存储过程
CREATE PROCEDURE name
[(param <datatype> [, param <datatype> …])]
[RETURNS <datatype> [, param <datatype> …])]
AS <procedure_body> [terminator]
//////////////////////////////////////////////
<procedure_body> =
[<variable_declaration_list>]
<block>
////////////////////////////////////////////////
<variable_declaration_list> =
DECLARE VARIABLE var <datatype>;
[DECLARE VARIABLE var <datatype>; …]
///////////////////////////////////

<block> =
BEGIN
<compound_statement>
[<compound_statement> …]
END

查询select:
SELECT [TRANSACTION transaction]
[DISTINCT | ALL]
{* | <val> [, <val> …]}
[INTO :var [, :var …]]
FROM <tableref> [, <tableref> …]
[WHERE <search_condition>]
[GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]
[HAVING <search_condition>]
[UNION <select_expr> [ALL]]
[PLAN <plan_expr>]
[ORDER BY <order_list>]
[FOR UPDATE [OF col [, col …]]];

注意:plan 和for的用法。

查询数据的前10行:
select FIRST 10 skip 2  * from EMPLOYEE

查询数据的前10行,用关键字first:
CAST ( <value> | NULL AS datatype)

From datatype To datatype
NUMERIC-> CHARACTER, DATE
CHARACTER-> NUMERIC, DATE
DATE-> CHARACTER, NUMERIC
 连接字符串:||
如:select id,name||‘ddd‘
from STUDENT
////////////////////////////////////////////////////////////////////
注意:在InterBase存储过程和触发器语言代码中,除了上面提到的复合语句Begin、End之外,所有的语句必须以分号结束,这一点必须明确。
单独的sql语句后也不用加分号结束。
//////////////////////////////////////////
单行选择语句Select…Into: 将选择的结果存储到Into之后的变量中,into子句必须放在整个选择语句的末尾。例如: Select Count(*) from Employee Into :varcount;
////////////////////////////////////////////////////////////////////
多行选择语句FOR select_statement DO compound_statement:
对select_statement返回的每一条记录重复执行compounde_statement语句,实际是一个循环结构。其中:select_statement是必须带有into子句的选择语句,而且into子句必须放在选择语句的末尾,而且后面不能跟分号。使用该语句可以返回多个数据行。语法结构是: For select_statement Do Compound_statement
/////////////////////////////////////////////////////////
IF (condition) THEN compound_statement[ELSE compound_statement]:
/////////////////////////////////////////////////////////////
SUSPEND: 暂时终止即挂起存储过程的执行,并将参数返回给客户端。这是存储过程专用的语句。
//////////////////////////////////////////////////////////////////
WHILE condition DO compound_statement: 当condition条件为真时,重复执行compounde_statement语句,直到condition条件为假时退出。
///////////////////////////////////////////////////////////////////////
WHEN{error[,error…]|ANY} DO compound_statement:
错误处理语句。当指定的错误之一出现时,执行compound_statement语句。如果使用了WHEN,那么必须将其放在整个存储过程或触发器的最后一个语句。error可以是异常、SQLCODE错误码、GDSCODE代码。ANY表示处理任何错误。
///////////////////////////////////////////////////
注意:在存储过程中,除了Create Procedure,As,Begin…End语句之外,任何其他语句末尾都要添加分号结束。因此,如果你使用isql创建存储过程,你必须另外定义其它的符号来代表创建存储过程的结束,通常使用set term语句完成。比如,在创建存储过程之前,使用set term !! ;把!!作为分号来表示存储过程创建的结束,在创建存储过程的语句之后,再用set term ; !!恢复分号的作用。如: 
Set Term ## ; Create Procedure Add_Emp_Proj (Emp_No Smallint, Proj_Id Char(5)) As Begin
Begin
Insert Into Employee_Project (Emp_No, Proj_Id) Values (:Emp_No, :Proj_Id);
 When Sqlcode -530 Do Exception Unknown_Emp_Id; 
End Return; 
End ## 
Set Term ; ##

特别注意:不论是输入参数、输出参数还是局部变量,如果在SQL语句中使用,前面必须加上冒号。如果不和SQL语句一起使用,则不要加冒号。
//////////////////////////////////
在存储过程中不要使用标准的select语句返回多行数据,而是要使用FOR…SELECT…INTO循环和SUSPEND语句通过输出参数来完成。
///////////////////////
删除存储过程 
要删除一个存储过程,可以使用Drop Procedure语句。不过你要注意如下的一些限制: 
·不能删除一个被其它存储过程、触发器、视图引用的存储过程,必须先将这种引用关系解除,然后才能删除存储过程。
·不能删除一个递归或者与其它存储过程形成循环依赖关系的存储过程,必须先解除这种递归或者循环依赖关系才能删除存储过程。
·如果存储过程正被活动事务使用,则必须等事务结束后才能删除。 
·只有超级用户和存储过程的创建者才能删除存储过程。
//////////////////////

时间: 2024-11-05 20:40:26

Firebird数据库相关操作的相关文章

cakephp v3.4 数据库相关操作

cakephp v3.4 数据库相关操作 查询对象 Query Objectclass Cake\ORM\Query 获取Query object表对象 Table Object 使用find()返回 1.任何情况下都可以从TableRegistry中获取use Cake\ORM\TableRegistry;$articles = TableRegistry::get('Articles');$query = $articles->find(); 2.在对应的控制器中(框架自动就创建了)$que

MFC 对MYSQL数据库相关操作

记得看过有人说,现在的软件基本上都是连着数据库的,如果一个软件没有跟数据库相连,基本没什么作用.虽然这种说法略显片面,但数据库之于软件的重要也是毋庸置疑的. MFC连接数据库应该不算是什么新鲜的命题了,方法是有好几种的,本人试了下,感觉利用MySQL提供的C语言API来进行操作蛮方便的,所以在此记录下相关的操作. 要用MySQL提供的C语言API,首先要包含API的头文件目录,也就是在MFC工程属性中的"包含目录"下添加MySQL安装目录的"include"文件夹.

使用SQLAlchemy对Firebird数据库进行操作

来这个公司已经一周了,度过了开始的无聊日子准备正式准备做点东西了,这几天接触了一下文件数据库InterBase,尝试在Ubuntu上连接其开源版本Firebird,因为公司使用的是SQLAlchemy,所以例子我也就用Python演示了. #安装firebird数据库 sudo apt-get install firebird-super 2,更改firebird中数据库管理员SYSDBA的密码: sudo dpkg-reconfigure firebird2.5-super 3,使用gsec命

Firebird数据库相关备忘录

Firebird数据库中有一些很特别的东西,很好用,但由于平时用的不多,记在这里,以备以后用到时查询. 1.以ADO 的OLE ODBC驱动方式访问 Firebird,可以使用如下连接串: FBConn:='Provider=MSDASQL.1;Driver=Firebird/InterBase(r) driver;Dbname=F:\TEST.FDB;CHARSET=NONE;UID=SYSDBA;PWD=masterkey'; 2.序列生成器,值是bigint 类型 在做自增加字段时使用,标

WinPhone开发数据库相关操作总结

1.首先来说下wp对.sqlite数据库的操作支持,从google,百度,codeplex..等等网站找寻到以下方式: (1)最古老的要数引用第三方Community.CsharpSqlite.WP.dll程序集来使用的(注意:如果你要操作现有存在的.sqlite数据库,而不是自己从头开始创建数据表,添加数据...等,那么你需要在codeplex网站上找到这个源码,进行相应的修改,这样才能够支持使用,不然会碰到很郁闷的"无法打开数据库连接.."之类的错误) (2)第二种跟第一种有所类似

python中MySQL数据库相关操作

一 安装基本环境: 1 安装MySQL数据库, 本文使用的是mariadb数据库,与MySQL相似 1 挂载镜像文件(本次使用的是本地镜像文件) 2 启动MySQL数据库 3 创建用户名和密码并刷新 grant all(表示所有操作) on .(库.表(所有的,也可以指定)) to [email protected](设置用户名为root,链接为本地链接) identified by 'roiot123';(设置密码)flush privileges;(刷新权限) 4 修改默认字符集: serv

MFC List Control控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作

作为现代的软件,往往是连着数据库的,而连着和用户方便地操作之间,还有着界面这道坎.MFC是Windows上比较好开发用户界面的框架,然而其自带的控件中没有对于数据库表格支持较好的控件,而使用网上提到的 DataGrid 等控件在本人的win8.1+VS2013平台上老出现找不到控件或者头文件的问题,搞的烦死人.最后想到 List Control 控件只要稍作修改,加上单元格编辑和单元格下拉列表,其实就能和数据库进行良好的对接,一百度,果然有人已经做了这件事,实在是太让人感动了!       

YII 数据库相关操作

CDbConnection:  一个抽象数据库连接 CDbCommand:     SQL statement CDbDataReader:  匹配结果集的一行记录 CDbTransaction:数据库事务 访问数据库前需要建立数据库连接:使用DAO建立一个抽象数据库链接: $connection = new CDbConnection($dsn, $username, $password); $connection->active = true;     // 只有激活了连接才可以使用 $co

YII 数据库相关操作(转)

CDbConnection: 一个抽象数据库连接CDbCommand: SQL statementCDbDataReader: 匹配结果集的一行记录CDbTransaction:数据库事务 访问数据库前需要建立数据库连接:使用DAO建立一个抽象数据库链接: $connection = new CDbConnection($dsn, $username, $password);   $connection->active = true;     // 只有激活了连接才可以使用   $connect