firebird学习笔记

  1. firebird默认的用户名:SYSDBA 密码:masterkey  
  2.   
  3. 开源的Firebird的可视化管理工具Marathon  
  4. flameRobin也量个开源的可视化管理工具  
  5. 1、创建表  
  6. CREATE TABLE table_name  
  7. (  
  8.     column_name {< datatype> | COMPUTED BY (< expr>) | domain}  
  9.         [DEFAULT { literal | NULL | USER}] [NOT NULL]  
  10.     ...  
  11.     CONSTRAINT constraint_name  
  12.         PRIMARY KEY (column_list),  
  13.         UNIQUE      (column_list),  
  14.         FOREIGN KEY (column_list) REFERENCES other_table (column_list),  
  15.         CHECK       (condition),  
  16.     ...  
  17. );  
  18.   
  19.  如:create table t1  
  20. (  
  21.     sno1 char(9) primary key,  
  22.     sno2 char(9) references student(sno)      
  23. )  
  24. 2、修改表  
  25. (1)增加字段  
  26. alter table table_name add fieldname datetype [not null ,primary key]  
  27. 如:alter table student add * char(2) not null   
  28.     primary key   
  29.     default ''m''   
  30.     CHECK (*1=''f'' or *1=''m'')   
  31.   
  32. ALTER TABLE STUDENT  
  33. ADD AGE INTEGER[1:100]  
  34. DEFAULT 56   
  35. CHECK (age between 20 and 35)   
  36.   
  37. ALTER TABLE STUDENT  
  38. ADD AGE INTEGER[1:100]  
  39. DEFAULT 56   
  40. CHECK (age>=20 and age<=35)   
  41. (2)删除字段  
  42. alter table table_name drop fieldname  
  43. ALTER TABLE STUDENT DROP AA  
  44. (3)增加主键  
  45. alter table SCORE  
  46. add constraint PK_SCORE_1  
  47. primary key (ID, CORUSENAME)  
  48.   
  49. 查询:  
  50. SELECT [TRANSACTION transaction]  
  51. [DISTINCT | ALL]  
  52. {* | <val> [, <val> …]}  
  53. [INTO :var [, :var …]]  
  54. FROM <tableref> [, <tableref> …]  
  55. [WHERE <search_condition>]  
  56. [GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]  
  57. [HAVING <search_condition>]  
  58. [UNION <select_expr> [ALL]]  
  59. [PLAN <plan_expr>]  
  60. [ORDER BY <order_list>]  
  61. [FOR UPDATE [OF col [, col …]]];  
  62.   
  63. 在表上增加外键  
  64. alter table STUDENT  
  65. add constraint FK_STUDENT_1  
  66. foreign key (ID)   
  67. references SCORE (ID)  
  68. ///  
  69. 创建域:  
  70. CREATE DOMAIN domain [AS] <datatype>  
  71. [DEFAULT {literal | NULL | USER}]  
  72. [NOT NULL] [CHECK (<dom_search_condition>)]  
  73. [COLLATE collation];    
  74. 如:  
  75. (1)create domain  MyScore  as SMALLINT  
  76. default 0  
  77. check(value between 0 and 100)  
  78. (2)CREATE DOMAIN DEPTNO AS CHAR(3)  
  79.      CHECK ((VALUE = ''000''OR   
  80.     (VALUE > ''0'' AND VALUE <= ''999'')   
  81.     OR (VALUE IS NULL))  
  82. 修改域:  
  83. ALTER DOMAIN name {  
  84. SET DEFAULT {literal | NULL | USER}  
  85. DROP DEFAULT  
  86. ADD [CONSTRAINTCHECK (<dom_search_condition>)  
  87. DROP CONSTRAINT | new_col_name  
  88.   
  89. | TYPE datatype};  
  90. 如:  
  91. (1)alter DOMAIN DAGE TYPE INTEGER  
  92. (2)alter DOMAIN DAGE TYPE INTEGER  
  93. set DEFAULT 40  
  94. add constraint CHECK (value  between 10 and 90)  
  95. (3)alter DOMAIN DAGE TYPE INTEGER  
  96. drop   CONSTRAINT  
  97. (4)CREATE DOMAIN prodtype  
  98.     AS VARCHAR(12)  
  99.     DEFAULT ''software'' NOT NULL  
  100.     CHECK (VALUE IN (''software''''hardware''''other''''N/A''));  
  101. 问题:不知道{USER}是什么意思,怎么用?  
  102.   
  103. 连接到数据:  
  104. CONNECT ''filespec'' [USER ''username''][PASSWORD ''password'']  
  105. [CACHE int] [ROLE ''rolename'']  
  106. 如:  
  107. connect g:\firebird\test.fdb user ''sysdba'' password ''masterkey'';//一定要加上‘;’以表示sql语句结束。  
  108.   
  109. 创建索引:  
  110. CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]] INDEX index  
  111. ON table (col [, col …]);  
  112. 创建视图:  
  113. CREATE VIEW name [(view_col [, view_col …])]  
  114. AS <select> [WITH CHECK OPTION];  
  115.   
  116. 创建存储过程  
  117. CREATE PROCEDURE name  
  118. [(param <datatype> [, param <datatype> …])]  
  119. [RETURNS <datatype> [, param <datatype> …])]  
  120. AS <procedure_body> [terminator]  
  121. //  
  122. <procedure_body> =  
  123. [<variable_declaration_list>]  
  124. <block>  
  125.   
  126. <variable_declaration_list> =  
  127. DECLARE VARIABLE var <datatype>;  
  128. [DECLARE VARIABLE var <datatype>; …]  
  129. ///  
  130.   
  131. <block> =  
  132. BEGIN  
  133. <compound_statement>  
  134. [<compound_statement> …]  
  135. END  
  136.   
  137. 查询select:  
  138. SELECT [TRANSACTION transaction]  
  139. [DISTINCT | ALL]  
  140. {* | <val> [, <val> …]}  
  141. [INTO :var [, :var …]]  
  142. FROM <tableref> [, <tableref> …]  
  143. [WHERE <search_condition>]  
  144. [GROUP BY col [COLLATE collation] [, col [COLLATE collation] …]  
  145. [HAVING <search_condition>]  
  146. [UNION <select_expr> [ALL]]  
  147. [PLAN <plan_expr>]  
  148. [ORDER BY <order_list>]  
  149. [FOR UPDATE [OF col [, col …]]];  
  150.   
  151. 注意:plan 和for的用法。  
  152.   
  153. 查询数据的前10行:  
  154. select FIRST 10 skip 2  * from EMPLOYEE  
  155.   
  156. 查询数据的前10行,用关键字first:  
  157. CAST ( <value> | NULL AS datatype)  
  158.   
  159. From datatype To datatype  
  160. NUMERIC-> CHARACTERDATE  
  161. CHARACTER-> NUMERICDATE  
  162. DATE-> CHARACTERNUMERIC  
  163.  连接字符串:||  
  164. 如:select id,name||''ddd''  
  165. from STUDENT  
  166.   
  167. 注意:在InterBase存储过程和触发器语言代码中,除了上面提到的复合语句BeginEnd之外,所有的语句必须以分号结束,这一点必须明确。  
  168. 单独的sql语句后也不用加分号结束。  
  169. //  
  170. 单行选择语句SelectInto: 将选择的结果存储到Into之后的变量中,into子句必须放在整个选择语句的末尾。例如: Select Count(*) from Employee Into :varcount;  
  171.   
  172. 多行选择语句FOR select_statement DO compound_statement:  
  173. 对select_statement返回的每一条记录重复执行compounde_statement语句,实际是一个循环结构。其中:select_statement是必须带有into子句的选择语句,而且into子句必须放在选择语句的末尾,而且后面不能跟分号。使用该语句可以返回多个数据行。语法结构是: For select_statement Do Compound_statement  
  174. /  
  175. IF (condition) THEN compound_statement[ELSE compound_statement]:  
  176. /  
  177. SUSPEND: 暂时终止即挂起存储过程的执行,并将参数返回给客户端。这是存储过程专用的语句。  
  178. //  
  179. WHILE condition DO compound_statement: 当condition条件为真时,重复执行compounde_statement语句,直到condition条件为假时退出。  
  180. ///  
  181. WHEN{error[,error…]|ANY} DO compound_statement:  
  182. 错误处理语句。当指定的错误之一出现时,执行compound_statement语句。如果使用了WHEN,那么必须将其放在整个存储过程或触发器的最后一个语句。error可以是异常、SQLCODE错误码、GDSCODE代码。ANY表示处理任何错误。  
  183. ///  
  184. 注意:在存储过程中,除了Create Procedure,As,BeginEnd语句之外,任何其他语句末尾都要添加分号结束。因此,如果你使用isql创建存储过程,你必须另外定义其它的符号来代表创建存储过程的结束,通常使用set term语句完成。比如,在创建存储过程之前,使用set term !! ;把!!作为分号来表示存储过程创建的结束,在创建存储过程的语句之后,再用set term ; !!恢复分号的作用。如:   
  185. Set Term ## ; Create Procedure Add_Emp_Proj (Emp_No Smallint, Proj_Id Char(5)) As Begin  
  186. Begin  
  187. Insert Into Employee_Project (Emp_No, Proj_Id) Values (:Emp_No, :Proj_Id);  
  188.  When Sqlcode -530 Do Exception Unknown_Emp_Id;   
  189. End Return;   
  190. End ##   
  191. Set Term ; ##  
  192.   
  193. 特别注意:不论是输入参数、输出参数还是局部变量,如果在SQL语句中使用,前面必须加上冒号。如果不和SQL语句一起使用,则不要加冒号。  
  194. //  
  195. 在存储过程中不要使用标准的select语句返回多行数据,而是要使用FORSELECTINTO循环和SUSPEND语句通过输出参数来完成。  
  196. ///  
  197. 删除存储过程   
  198. 要删除一个存储过程,可以使用Drop Procedure语句。不过你要注意如下的一些限制:   
  199. ·不能删除一个被其它存储过程、触发器、视图引用的存储过程,必须先将这种引用关系解除,然后才能删除存储过程。  
  200. ·不能删除一个递归或者与其它存储过程形成循环依赖关系的存储过程,必须先解除这种递归或者循环依赖关系才能删除存储过程。  
  201. ·如果存储过程正被活动事务使用,则必须等事务结束后才能删除。   
  202. ·只有超级用户和存储过程的创建者才能删除存储过程

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值