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_NAMEORDER 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
《基本数据类型》
INTEGER:长整型,取值范围:-2147483648至2147483647
FLOAT:单精度浮点型
DOUBLE PRECISION:双精度浮点型
DECIMAL:小数型,可指定有效位数最大为18位或小数点后18位
NUMERIC:小数型
SMALLINT:短整型,取值范围:-32768至32767
CHAR:字符型,最多32767个字符
VARCHAR:可变长度字符型,最多32767个字符
TIME:时间型,取值范围:00:00至23:59.9999
TIMESTAMP:日期时间型,取值范围:公元100年1月1日至公元32768年2月29日
DATE:日期型,取值范围:公元100年1月1日至公元32768年2月29日。,注意,建库时需选择DIALECT 3级别才支持DATE型,否则就是TIMESTAMP型。
1. 当数据含小数部分时,请尽量用DECIMAL,因为浮点型有精度问题,除非数值特别大,才用浮点型!
2. DECIMAL(5,2)与NUMERIC(5,2)所分别定义的字段,DECIMAL(5,2)指的是至少有5位数字,还可以更多!而NUMERIC(5,2)指的是,就是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 * 返回字符串字节数
12. IIF (<search_condition>, <value1>, <value2>)
13. NULLIF(V1,V2) 如果V1=V2,返回NULL,否则返回V1