赛迪网技术社区 » DB2 » 数据库使用经验漫谈 转到动态网页
« 1 2» Pages: ( 1/2 total )
--> 本页主题: 数据库使用经验漫谈 返回 | 悬赏 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11


数据库使用经验漫谈


DB2数据库使用 T$XbC  
  DML(Data Manipulation Language commands)数据操纵语言 M1cI)C{O  
  DDL(Data Definition Language commands) 数据定义语言 %X{\P!H1;)  
  TCC(Transaction Control commands)   事务控制语言 g:#EL3_'  
  SCC(System Control commands )     系统控制语言

本贴标签:
顶端 Posted:2007-05-25 13:06 | [楼 主]
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



一 DML数据操纵语言 $l:t3-GeW  
q= Hm 9{  
  (一)数据查询命令 vBTM{  
u:JdaB:H  
  select <查询内容>   From <表名> \<&E'b?  
  where <条件>   /*in,between,like%或_*/ R0:V`RS  
  group by<分组内容> FsQBeU  
  having<组内条件> +qSL(z X1  
  order by<排序内容>[asc/desc]; ]: j(m"v  
p2 4HL -+]  
  (二)数据更新命令 yi674AN  
W4q8  
  1、数据插入命令 kMU! p  
[:41e t  
(1).具体的值插入表中 Io3^GuI`  
    Insert into <表名> [(列名表)] KX _,SG  
      values<值表1>,<值表2>,<值表2>... ^} ^g-  x  
  (注: 日期,字符型值加引号) jmpsd  
  (2).将其它表满足条件的数据插入到一个表中 ((xU/  
    Insert into <表名> [<列表名>] <select 子句> gl-pwi  
0p,<J  
ys0m /V8  
  2、数据修改命令 "rq@[:|  
Y'_a;%b  
  Update <表名> set <列名1>=<表达式1>,<列名2>=<表达式2>...[where<条件>]; /DD9V {$  
sn<p+aQ%P  
  Update <表名> set <列名1>=(< select 子句 >) [where<条件>]; jY]D {+t  
04r1!fJ  
  3、数据删除命令 ;VI/_@<_s  
5c#LT&HLJJ  
  Delete from <表名> [where<条件>];

顶端 Posted:2007-05-25 13:06 | 1 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



二 DDL数据定义语言 I&_fJ(   
mC` w 5}  
  (一)、基本数据类型 9RUZHtE2!g  
  1.字符串 Xt= 8ifWcu  
  字符串为一个字节序列,字符串的长度为序列中的字节数。如果长度为零,则该字符串的值称为空字符串。 KEgmrJLHXl  
vBS$75<wI  
  CHAR(x)   是固定长度字符串。(1= }wztfl  
  VARCHAR(x)   可变长度字符 x<=4000,x>254不能用group by ,order by,distinct 和除       >2O2G^p  
  union all以外的任何设置操作。 Od._N]K!b  
(-T3+ ]  
  GRAPHIC(x)   是固定图形字符串。(1=  I-3"02l  
  BLOB     二进制字符串,是一个字节序列,用于保存非传统数据,如图象、图形、声音等数据。 yvl!^6jkt  
^rP\zIn"b  
  2 数字 :所有数字都有符号和精度。精度是除开符号的位数或数字数。 XYB?#w>y  
zh!mCCNYDx  
  SMALLINT   小整数,是精度为5位的两字节整数。 +~^,56zt  
  INTEGER   大整数,是精度为10位的四字节整数。 =3263$8'  
  REAL     单精度浮点数,是实数的32位近似值。 -CEawah#?  
  DOUBLE   双精度浮点数,是实数的64位近似值,DOUBLE也称FLOAT。 n=--)aw5  
  DECIMAL(p,s)   DECIMAL是一个十进制数。小数点的位置由数字的 精度(p)和小数位(s)     ZOMmn^  
  确定。精度是数字的总位数,必须小于32。小数位是小数部分数字的位数且总是小于或等于精度值。如果未指定精度和小数位,则十进制值的缺省精度为5,缺省小数位为0。

顶端 Posted:2007-05-25 13:08 | 2 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



3 日期时间值 :日期时间值是日期、时间以及时间戳记的表示,日期时间值可以用于某些算术运算和字符串运算并且与某些字符串是相容的。 rK#(wZe  
mE#\F[q1A  
  DATE     由三个部分构成(年、月以及日)。 oqgMusg  
  TIME     使用24小时制,分为三个部分(小时、分钟以及秒)。 dGLd3?!!S  
  IMESTAMP   分为七个部分(年、月、日、小时、分钟、秒以及微秒)。 FP0O}z&U  
`8fz+cR;p  
  4空值     空值是一个区别于所有非空值的特殊值。它意味着行中的那一列无任何其 VEUvraGL0}  
  它值。所有数据类型都存在空值。

顶端 Posted:2007-05-25 13:08 | 3 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



(二)、数据定义 /3Y]^\  
   1、Create (创建) US>9B|^  
  创建表: ~:YTVj8GT  
  Create table [<模式名>.]<表名>   (<列名1> <类型> [Null|Not null] [,<列 ,ycMGYf  
    名2> <类型>...] {zzuA#Z6e  
  创建视图:   j{J`l}-e;  
  Create view [<模式名>.]<视图名> [<列名表>] as select 语句 >.TjO(Q  
  创建别名:   E Pjl *GI  
  Create alias [<模式名>.]别名 for [<模式名>.]表名/视图名/别名 6@u_e] j  
  创建索引: `'H3,^!H  
  Create [unique] index <索引名> /*I_表名_字段名*/ on <表名>(<列名 :Ri}g&  
    >[asc|desc] +Ikxgy7X  
  

顶端 Posted:2007-05-25 13:09 | 4 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



创建模式: k=Wncy7Py{  
CREATE SCHEMA 模式名   authorization 权限名 Ud ZNj$'  
 2、Drop (摧毁) /Wjh3!.4  
  摧毁表: ]uASM6}H  
  drop table [<模式名>.]表名 *")D'  
  摧毁视图: ]<7ck  
  drop view [<模式名>.]视图名 &IU>EVPpv  
  摧毁别名: ZD{r1  
  drop alias [<模式名>.]别名 ( {XP_IID,  
  摧毁触发器: )crk A$1  
  drop trigger [<模式名>.]触发器名 |u%<zu{43  
  摧毁索引: </6s  
  drop index [<模式名>.]<索引名> a4"":S+1  
  摧毁包: E.^f0!J  
  drop package [<模式名>.]包名 $s&]'**>A]  
!>fBA1{s9p  
  3、Alter (变更) .9[kU]j  
  增加表列: hNf~r$   
  Alter table [<模式名>.]<表名> add column [<列名1> <类型> [Null|Not null]]... 9f23HK`9  
  增加约束:   9P56s$~bU  
  Alter table [<模式名>.]<表名> add constraint 列名 CHECK (约束)     7Kax h  
  删除约束: 4?^ N%2d  
  Alter table [<模式名>.]<表名> drop constraint 约束名     j@R3 o%h  
  修改列类型: \88,\G3eJ  
  Alter table [<模式名>.]<表名> alter column 列名 set data type <类型> ?xuPzEdQS  
!le6T`c*u  
  4、Grant (赋权) 9dZhH0A3!  
  对[public/用户/组] 赋于在表上的[all/select/insert/update/delete] 权限: '3C$YXwM\  
  Grant [all/select/insert/update/delete] on [<模式名>.]表名to [public/用户/ P)ra1^@{  
    组]; #?:@/1if  
  对[public/用户/组] 赋于在包上的[bind/execute/]权限:     H2yq,i o  
  Grant [bind/execute/] on package [<模式名>.][包名] to [public/用户/组];   p7`H/}wX  
  对[public/用户/组] 赋于在索引上的[control]权限: 07Y`6e  
  Grant control on index [<模式名>.]索引名 to [public/用户/组] er({j~  
j]53jn  
  5、Revoke (回收) ;/bin ]6&  
  从public/用户/组] 回收在表上的[all/select/insert/update/delete] 权限:     n{vTz +R  
  Revoke [all/select/insert/update/delete] on [表名] from [public/用户/组]; 5 ?Gx=  
  从public/用户/组] 回收在包上的[bind/execute/] 权限: UVq[Y=}dpr  
  Revoke [bind/execute/] on package [<模式名>.][包名]from [public/用户/组]; WW"P*s9d  
三 事务控制语言 #5o2G}  
  1.事务提交命令: Commit; I&;B8adf  
  2.事务回退命令: Rollback;

顶端 Posted:2007-05-25 13:10 | 5 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



四 系统控制语言 9{:|noCW  
I6MV,QN\  
  1.取消自动提交: p[H^pf} 1  
  Update command options using c off; IzYK_5`Y,f  
  2.连接数据库: |bGemS w  
  Connect to 数据库名 user 用户 using 密码 :KfI)rJ  
  3.断开数据库连接: <,P)VK  
  Connect reset 2Kz[s  
  Disconnect 数据库名 cUZbNs  
  4.列出数据库中的所有表: ,F";j  
  List tables for all -^q/2d^  
  5.列出数据库中的模式名为SCHEMA_name的所有表: nQR '32y[  
  List tables for SCHEMA SCHEMA_name 0ywj= 3G  
  6.查看表结构 vo_DsVl<  
  Describe table 模式名.表名 ka@g=uY15  
  Describe select * from 模式名.表名 cd |  
  7.查看表的索引 ^ eDV7  
  Describe indexes for table 模式名.表名

顶端 Posted:2007-05-25 13:12 | 6 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



五 函数 #1>?C#I  
W9b_@4r  
  (一) 列函数 _3,[ b#)  
  列函数对列中的一组值进行运算以得到单个结果值。 dHF<-92{  
;Wo >'Wf  
  1.AVG b8z*IYmX  
  返回某一组中的值除以该组中值的个数的和 #E2#m9#!  
  2.COUNT (*) qtrzai  
  返回非空列值的行数。 `1pt~4[hg  
  3.MAX }DP8 f,u`V  
  返回一组值中的最大值 3-5 d7X~]  
  4.MIN s6G}Ju&  
  返回一组值中的最小值 qqDN}9;  
  5. MOD /YA|zRp;0  
  求余  U)%c'4Q  
jG^N`DxY  
  (二) 标量函数 .y_k*R^l  
  标量函数对值进行某个运算以返回另一个值。下列就是一些由DB2通用数据库提供的标量函数的示例。 8F9@\?H  
M{* <)P  
  1.ABS ]=VV|1n:F  
  返回数的绝对值 %Z[V<&  
  2.HEX VDx}^sr  
  返回值的十六进制表示 ;w(J]  
  3.LENGTH e2v@7I   
  返回自变量中的字节数(对于图形字符串则返回双字节字符数。) ;6)NB4LS  
  4.YEAR 3op$\a;  
  抽取日期时间值的年份部分 LAG9HvU  
  5.NULLIF(a,b) V* nvCvWB  
  如果a=b则值为空,否则值为a FhQK7Wx  
  6.COALESCE(a,b,c) !7M}<!D  
  :返回第一个具有非空值的参数的值 gac%yE  
  7.UCASE(str) 38tFilA  
  小写字符转换成大写字符 )YkK$]s?_  
  8.ICASE(str) ?;8 . $J  
  大写字符转换成小写字符 A^ij1?0|o  
  9.LOCAT(str1,str2,n) cWJ"h>  
  返回从第n个字符起,在str1中str2第一次出现的位置 90@>8Xu  
  10.SUBSTR(str,m,n) }croYj  
  返回从第m个字符起,,在str中的n个字符串

顶端 Posted:2007-05-25 13:13 | 7 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



六 嵌入式SQL(SQLJ) k;W(y   
4H~H$^ga  
  将SQL语句嵌入应用程序时,必须按以下步骤预编译应用程序并将其与数据库联编: o&W0<~)bw  
  1.创建源文件,以包含带嵌入式 SQL 语句的程序 V6"Z_f5RN  
  格式: # SQL{ SQL语句 } 。 jJJO:lm  
  2.连接数据库,然后预编译每个源文件。 [3B'CGi  
  语法: SQLJ 源文件名 3s+I=faCy  
>64  
  例: }^yu^rTY  
import Java.sql.*;import sqlj.runtime.*;import sqlj.runtime.ref.*;#sql iterator App_Cursor1 (String empno, String firstnme) ;#sql iterator App_Cursor2 (String) ;class App {   static   {   try   {   Class.forName("sun.JDBC.odbc.JdbcOdbcDriver").newInstance();   }   catch (Exception e)   {     e.printStackTrace();   }   }   public static void main(String argv[])   {   try   {     App_Cursor1 cursor1;     App_Cursor1 cursor2;     String str1 = null;     String str2 = null;     int   count1;     Connection con = null;     String url = "jdbc:odbc:tese2";     DefaultContext ctx = DefaultContext.getDefaultContext();     if (ctx == null) {       try {       if (argv.length == 0) {       String userid ="tdl";       String passwd ="user";       con = DriverManager.getConnection(url, userid, passwd);       }       else if (argv.length == 2) {       // connect with default id/password       con = DriverManager.getConnection(url);       }       else {       System.out.println("\nUsage: java App [username password]\n");       System.exit(0);       }       con.setAutoCommit(false);       ctx = new DefaultContext(con);       }     catch (SQLException e) {       System.out.println("Error: could not get a default context");       System.err.println(e) ;       System.exit(1);     }     DefaultContext.setDefaultContext(ctx);     }     #sql cursor1 = { SELECT empno, firstnme from DB2admin.employee };       System.out.println("Received results:");     while (cursor1.next()) {       str1 = cursor1.empno();       str2 = cursor1.firstnme();       System.out.print (" empno= " + str1);       System.out.print (" firstname= " + str2);       System.out.print ("\n");     }     cursor1.close();     #sql cursor2 = { SELECT firstnme from db2admin.employee where empno = :str1 };     System.out.println("Received results:");     while (true) {       #sql { FETCH :cursor2 INTO :str2 };       if (cursor2.endFetch()) break;       System.out.print (" empno= " + str1);       System.out.print (" firstname= " + str2);       System.out.print ("\n");     }     cursor2.close();     // rollback the update     System.out.println("\n\nRollback the update...");     #sql { ROLLBACK work };     System.out.println("Rollback done.");   }   catch( Exception e )   {     e.printStackTrace();   }   }}

顶端 Posted:2007-05-25 13:13 | 8 楼
changelive


用户名: changelive
级别: 总版主
精华: 31
发帖: 402
经验值: 785 点
积分: 1678 分
贡献值: 0
注册时间:2007-04-11



七 触发器 -&J^BHuF  
  建一个触发器,应包含以下部分: ID|1m(^  
  触发器名字 2_%D*;Kqz  
  触发器触发事件: insert,delete,update >{6dR_k8  
  激活时间: before,after ,$d{ Zvr  
  粒度: for each statement,for each row -qH c @-j  
  过渡变量: rnmWIpD  
  old row:表示触发事件之前被修改的值: 6JOtddn  
  new row表示触发事件之后被修改的值 Al5(=Hh)  
  old table表示触发事件之前全部被修改行的一个只读假想表 qYzTf$@\W  
  new table表示触发事件之后全部被修改行的一个假想表 q8j! zW  
  触发条件: 由WHEN开始,可包含一个或多个谓词,可包含过渡变量和子查询 3UV*$fA.RE  
  触发体: 由一个或多个SQL语句组成 FaSu}4  
ilv']3  
例: 4=S g&](  
  X`B ]iS~<  
CREATE TRIGGER REORDER   AFTER UPDATE OF ON_HAND, MAX_STOCKED ON PARTS   REFERENCING NEW AS N_ROW   FOR EACH ROW MODE DB2SQL   WHEN (N_ROW.ON_HAND < 0.10 * N_ROW.MAX_STOCKED   AND N_ROW.ORDER_PENDING = 'N')   BEGIN ATOMIC     VALUES(ISSUE_SHIP_REQUEST(N_ROW.MAX_STOCKED -               N_ROW.ON_HAND,               N_ROW.PARTNO));     UPDATE PARTS SET PARTS.ORDER_PENDING = 'Y'     WHERE PARTS.PARTNO = N_ROW.PARTNO;   END

顶端 Posted:2007-05-25 13:13 | 9 楼
« 1 2» Pages: ( 1/2 total )

 赛迪网技术社区 -> DB2
快速发帖 顶端
内容
HTML 代码不可用

使用签名
Wind Code自动转换

字数检查 恢复数据
按 Ctrl+Enter 直接提交
表情 [更多]