本代码在:WinXp Pack 3 + Delphi2009 updata1 火鸟Firebird2.5.0.23247下测试通过。

使用了Data Access面板的组件用SQL进行操作

火鸟Firebird数据库的中文参考资料

■firebird标准连接串

Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbName=C:/document. and Settings/Administrator/桌面/data/demo.fdb; default character set gbk; 使用中文时在创建数据库语句中就应该加这句,并且连接文本中也要用这句。

.NET - Firebird .Net Data Provider 连接串

User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost;Port=3050;Dialect=3; Charset=NONE;Role=;Connection lifetime=15;Pooling=true;MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;

■Firebird除了可见的表外,还隐藏了系统表具体可用(注意以下语句中的""中的文本区分大小写)

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

SELECT RDB$RELATION_NAME FROM RDB$RELATIONS;

这样我们就能看到rdb$开头的系统表,如约束信息表:

rdb$relation_constraints 及与其相关的 RDB$CHECK_CONSTRAINTS RDB$INDEX_SEGMENTS

一、分页写法小例:

select first 10 templateid,code,name from template ;

select first 10 skip 10 templateid,code,name from template ;

select * from shop rows 1 to 10; --firebird2.0支持这种写法

二、show

show tables;

show table tablename;

三、

D:/firebird2/bin>isql -u sysdba -p masterkey

connect "E:/company/xmwsoft/newxmwsoft/c2/db/cts2.fdb";

四、--更新字段注释

update RDB$RELATION_FIELDS

set RDB$DESCRIPTION = "描述信息"

where (RDB$RELATION_NAME = "SHOP") and

(RDB$FIELD_NAME = "CREDIT_BUY")

五、--显示字段注释

select RDB$FIELD_NAME,RDB$DESCRIPTION from RDB$RELATION_FIELDS

where (RDB$RELATION_NAME = "SHOP")

and

(RDB$FIELD_NAME = "CREDIT_BUY")

六、--更新表注释

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

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

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

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

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

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

SELECT a.RDB$RELATION_NAME, b.RDB$FIELD_NAME, b.RDB$FIELD_ID, d.RDB$TYPE_NAME,

c.RDB$FIELD_LENGTH, c.RDB$FIELD_SCALE

FROM RDB$RELATIONS a

INNER JOIN RDB$RELATION_FIELDS b

ON a.RDB$RELATION_NAME = b.RDB$RELATION_NAME

INNER JOIN RDB$FIELDS c

ON b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME

INNER JOIN RDB$TYPES d

ON c.RDB$FIELD_TYPE = d.RDB$TYPE

WHERE a.RDB$SYSTEM_FLAG = 0

AND d.RDB$FIELD_NAME = "RDB$FIELD_TYPE"

ORDER BY a.RDB$RELATION_NAME, b.RDB$FIELD_ID

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

SELECT A.RDB$FIELD_NAME, B.RDB$FIELD_TYPE, B.RDB$FIELD_LENGTH, B.RDB$FIELD_PRECISION, B.RDB$FIELD_SCALE

FROM RDB$RELATION_FIELDS A, RDB$FIELDS B

WHERE A.RDB$RELATION_NAME = "tablename"

AND A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME

ORDER BY A.RDB$FIELD_POSITION

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

select A.RDB$FIELD_NAME FROM RDB$INDEX_SEGMENTS A, RDB$RELATION_CONSTRAINTS B

WHERE B.RDB$CONSTRAINT_TYPE = "PRIMARY KEY"

AND B.RDB$RELATION_NAME = "tablename"

AND A.RDB$INDEX_NAME = B.RDB$INDEX_NAME

ORDER BY A.RDB$FIELD_POSITION

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

select r1.RDB$CONSTRAINT_NAME, rind.RDB$FIELD_NAME, r2.RDB$RELATION_NAME

FROM RDB$RELATION_CONSTRAINTS r1, RDB$RELATION_CONSTRAINTS r2, RDB$REF_CONSTRAINTS ref, RDB$INDEX_SEGMENTS rind

where r1.RDB$RELATION_NAME = "tablename"

and r1.RDB$CONSTRAINT_TYPE = "FOREIGN KEY"

and r1.RDB$CONSTRAINT_NAME = ref.RDB$CONSTRAINT_NAME

and ref.RDB$CONST_NAME_UQ = r2.RDB$CONSTRAINT_NAME

and r1.RDB$INDEX_NAME = rind.RDB$INDEX_NAME

十四、添加主键等约束

alter table tablename add constraint PK_tablename primary key(FIELDname)

alter table tablename add constraint uq_FIELD unique(FIELDname) 或 alter table tablename add unique(FIELDname)

添加NOT NULL约束比较特殊

update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'FIELDNAME') and (RDB$RELATION_NAME = 'TN')

insert into RDB$RELATION_constraints values('NN_FIELD','NOT NULL','WFW','NO','NO','')

insert into RDB$CHECK_constraints values('NN_FIELD','FIELD')

十五、删除主键等约束

先查这个表的主键名

select RDB$CONSTRAINT_NAME from RDB$RELATION_CONSTRAINTS where RDB$CONSTRAINT_TYPE='PRIMARY KEY' and RDB$RELATION_NAME='tablename'

然后

alter table tablename drop constraint 主键名 (主键名一般在隐藏的系统表中,每个约束一个名。)

十六、创建数据库

Create Database 'D:/Mydb.fdb' user 'sysdba' password 'masterkey' [default character set gbk]

十七、查指定字段Not Null约束

SELECT a.rdb$trigger_name,b.rdb$constraint_name,b.rdb$constraint_type FROM RDB$CHECK_CONSTRAINTS a, rdb$relation_constraints b where a.rdb$constraint_name=b.rdb$constraint_name and b.rdb$constraint_type='NOT NULL' and b.RDB$RELATION_NAME='表名' and a.rdb$trigger_name='字段名'

十八、查指定表所有unique约束 和 主键约束

SELECT a.RDB$FIELD_NAME,b.rdb$constraint_name,b.rdb$constraint_type FROM RDB$INDEX_SEGMENTS a, rdb$relation_constraints b where a.RDB$INDEX_NAME=b.RDB$INDEX_NAME and b.RDB$RELATION_NAME='tablename'

十九、修改字段类型

ALTER TABLE TABLENAME ALTER FIELDNAME TYPE FLOAT

二十、改字段名

alter table TABLENAME alter oldFIELDname to newFIELDname

■Firebird的基本数据类型

由于排版关系,取幂将用[],比如10[5],表示10的5次方。

INTEGER:长整型,取值范围:-2147483648至2147483647

FLOAT:单精度浮点型,取值范围:1.175*10[-38]至3.402*10[38]

DOUBLE PRECISION:双精度浮点型,取值范围:2.225*10[-308]至1.797*10[308]

DECIMAL:小数型,可指定有效位数最大为18位或小数点后18位。比如DECIMAL(5,2),就是指有5位数字,不含小数点,形如123.45

NUMERIC:小数型,与DECIMAL类似,稍后讲它们的区别。

注意,当数据含小数部分时,请尽量用DECIMAL,因为浮点型有精度问题,除非数值特别大,才用浮点型!

DECIMAL与NUMERIC的区别:

比如,DECIMAL(5,2)与NUMERIC(5,2)所分别定义的字段,DECIMAL(5,2)指的是至少有5位数字,还可以更多!而NUMERIC(5,2)指的是,就是5位,不多也不少。

SMALLINT:短整型,取值范围:-32768至32767,数值确定比较小时,可以使用,可以节省磁盘空间与提升效率

CHAR:字符型,最多32767个字符,注意,使用CHAR类型,即使字符数没有达到指定字段的宽度,也会用空字符补满!取值时,请注意用TRIM()等函数去掉多余空字符。除非确定每条记录的字符数不变,否则请用VARCHAR类型。

VARCHAR:可变长度字符型,最多32767个字符,存储时,会根据内容长度自动改变存储位数,不会产生多余空字符。当字符数超过32767时,请用BLOB型。

TIME:时间型,取值范围:00:00至23:59.9999

TIMESTAMP:日期时间型,取值范围:公元100年1月1日至公元32768年2月29日,同时包含日期与时间信息。

DATE:日期型,取值范围:公元100年1月1日至公元32768年2月29日。,注意,建库时需选择DIALECT 3级别才支持DATE型,否则就是TIMESTAMP型。

BLOB:大二进制型,可支持Text(文本)、Binary Data(二进制型,比如图片,声音等)等子类型。取值范围:64KB以内。

BOOLEAN:逻辑型,Firebird 2.0引入的新类型。取值范围:TRUE(值)或FALSE(假)。使用BOOLEAN而不用SMALLINT的理由是可以用更少的位数来存储,而且与SQL标准兼容,但是,数据将与1.5版本不兼容。

■1. COUNT, AVG, MAX, MIN, SUM

说明:通用统计函数,不详细介绍了

2. EXTRACT(timestamp_part FROM value)

说明:EXTRACT(YEAR/MONTHE/DAY/WEEKDAY FROM 字段名)

从日期型字段中分离出年,月,日及一个星期的第几天

3. CAST(value AS datatype)

说明:转换数据类型

4. LOWER() *

说明:返回小写值

5. UPPER()

说明:返回大写值

6. TRIM() *

说明:去除字符串两边的空格

7. SUBSTRING(string FROM pos FOR length)

说明:取字符串子串,注意,第一个字符的位置是1

8. BIT_LENGTH *

说明:返回字符串位(bit)数

9. CHAR_LENGTH/CHARACTER_LENGTH *

说明:返回字符串字符数

10. OCTET_LENGTH *

说明:返回字符串字节数

11. CASE

说明:通过执行外来的一组条件取得相应的返回值

举例

i) 简单

SELECT o.ID, o.Description,

CASE o.Status

WHEN 1 THEN "confirmed"

WHEN 2 THEN "in production"

WHEN 3 THEN "ready"

WHEN 4 THEN "shipped"

ELSE "unknown status """ || o.Status || """"

END

FROM Orders o;

ii) 表达式

SELECT o.ID, o.Description,

CASE

WHEN (o.Status IS NULL) THEN "new"

WHEN (o.Status = 1) THEN "confirmed"

WHEN (o.Status = 3) THEN "in production"

WHEN (o.Status = 4) THEN "ready"

WHEN (o.Status = 5) THEN "shipped"

ELSE "unknown status """ || o.Status || """"

END

FROM Orders o;

12. IIF (, , )

说明:表达式为真,返回value1否则返回value2

等价于以下语句:

CASE

WHEN THEN

ELSE

END

13. NULLIF(V1,V2)

说明:如果V1=V2,返回NULL,否则返回V1

等价于以下语句:

CASE WHEN V1 = V2 THEN NULL ELSE V1 END

举例

UPDATE PRODUCTS

SET STOCK = NULLIF(STOCK,0)

14. COALESCE(V1, V2, …, Vn)

说明:如果V1为Null,返回V2,否则返回V1,

如果 n >= 3, 等于如下case语句:

CASE

WHEN V1 IS NOT NULL THEN V1

ELSE COALESCE (V2,...,Vn)

END

举例

SELECT

PROJ_NAME AS Projectname,

COALESCE(e.FULL_NAME,"[< not assigned >]") AS Employeename

FROM

PROJECT p

LEFT JOIN EMPLOYEE e

ON (e.EMP_NO = p.TEAM_LEADER);

SELECT

COALESCE(Phone,MobilePhone,"Unknown") AS "Phonenumber"

FROM Relations;

■ 某表tbl,

字段A,varchar

字段B,date

字段C,numeric

如有一下数据:

A,B,C

0001,2008-3-1,7

0001,2008-3-2,14

0002,2008-3-1,32

0002,2008-3-3,56

0001和0002的最新日期是不一致的。

我现在可以查出0001和0002的最新日期的数据,

select * from tbl a

where B=(select max(B) from tbl B where a.A=b.A)

得到

0001,2008-3-2,14

0002,2008-3-3,56

问题是如何查出次新日期的数据,得到

0001,2008-3-1,7

0002,2008-3-1,32

channon:自己解决了

select * from tbl a

where B=(select max(B) from tbl b where a.A=b.A

and B<(select max(B) from tbl c where c.A=b.A))

Firebird学习(02):数据库的中文参考资料相关推荐

  1. 火鸟Firebird数据库的中文参考资料

    火鸟Firebird数据库的中文参考资料 ■firebird标准连接串 Driver=Firebird/InterBase(r) driver;Uid=SYSDBA;Pwd=masterkey;DbN ...

  2. 【转】火鸟Firebird数据库的中文参考资料

    本代码在:WinXp Pack 3 + Delphi2009 updata1 火鸟Firebird2.5.0.23247下测试通过. 使用了Data Access面板的组件用SQL进行操作 作者:LA ...

  3. java虚拟机预先加载哪些类_Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  4. Python 学习 02 —— Python如何爬取数据

    文章目录 系列文章 二.Python 爬 虫 1.任务介绍 2.简介 3.基本流程 3.1.准备工作 3.1.1.分析页面 3.1.2.编码规范 3.1.3.导入模块 3.1.4.程序流程 3.2.获 ...

  5. 5天学习MYSQL数据库第一天剩余全部笔记(超级详细的mysql入门笔记适合新手反复看加深记忆)

    这是关于五天学习MYSQL数据库的笔记,如果想要观看视频可以访问(视频链接(b站) 或者访问视频链接 之前的笔记已经记到了1.3的mysql基本介绍,接下来主要是: 2.1MySQL服务端框架 一. ...

  6. mysql 数据库乱码的解决办法_数据库 MySQL中文乱码解决办法总结

    前言: MysqL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 ...

  7. 学习Oracle数据库入门到精通教程资料合集

    任何大型信息系统,都需要有数据库管理系统作为支撑.其中,Oracle以其卓越的性能获得了广泛的应用.本合集汇总了学习Oracle数据库从入门到精通的30份教程资料. 资料名称 下载地址 超详细Orac ...

  8. 报错解决:form表单提交存入数据库出现中文乱码

    遇到问题:在JavaWeb学习阶段,通过表单提交对数据库数据进行修改,发现原本为中文字段的数据,表单提交之后都变成了乱码. 解决措施:针对form表单的请求方式修改编码格式 get和post请求的区别 ...

  9. 带领初学者学习 SQL 数据库编程视频教程(11 个视频)

    带领初学者学习 SQL 数据库编程视频教程(11 个视频) #1 课程介绍「02:04」 #2 在各操作系统中安装 MySQL 和 PostgreSQL 数据库「05:46」 #3 工欲善其事,必先利 ...

  10. java后端系统学习总结 02_数据库基础学习、jdbc基础学习、er图基础学习、数据库——(完结)

    猿猿正在系统的学习一些计算机知识,和后端技术栈,目前阶段主要在系统学习java.此专栏,为我学习过程中的学习笔记,便于日后复习回顾来看,也很适合新人学习参考. 以下是猿猿对数据库和java深入的第一遍 ...

最新文章

  1. Oracle-ORA-01722 invalid number错误
  2. 丑数 Ugly Number
  3. java连接mongodb_第78天: Python 操作 MongoDB 数据库介绍
  4. Java的坏功能是什么
  5. 阿里主管通知我试用期延期……
  6. java远程插件动态注册机制_Spring运行时动态注册bean的方法
  7. SQL中一种类似GUID值的函数实现
  8. selenium+python模拟键盘鼠标操作,python3.6安装pyUserInput
  9. spring boot介绍及使用详解
  10. 使用jave(ffmpeg)将.amr音频转码成mp3
  11. eclipse adt 插件离线安装
  12. 思科模拟器配置默认路由(下一跳使用端口)
  13. 神圣罗马帝国(1157~1806)
  14. amd显卡风扇调节_amd显卡风扇速度设置linux版本
  15. 贝尔曼方程基于全期望公式的前期推导
  16. 第一章第十二题(以千米计的平均速度)(Average speed in kilometers)
  17. 对AutoResetEvent和ManualResetEvent的理解
  18. python画建筑物_函数绘制带有门窗的建筑
  19. 服务器虚拟化专用ovf模板,Vmware虚拟机备份、OVF模板
  20. 拉卡拉支付:以技术为核心驱动金融变革

热门文章

  1. 【股票】融资融券基本概念
  2. 百度快照出问题投诉有没有用?
  3. Linux下动态库so查找与函数列表
  4. ObjectARX标注公差简单实例
  5. Blend 设置通明窗体
  6. java毕业设计——基于java+JSP+MySQL的健身俱乐部会员管理系统设计与实现(毕业论文+程序源码)——健身俱乐部会员管理系统
  7. NetLimiter Pro
  8. Windows下模拟弱网(web、app)均可使用
  9. duilib入门简明教程(1)
  10. 指定Web打印的打印机