中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > DB2
数据库使用经验漫谈
作者:佚名 时间:2007-06-22 15:47 出处:ccidnet.com 责编:月夜寒箫
              摘要:数据库使用经验漫谈
DB2数据库使用
  DML(Data Manipulation Language commands)数据操纵语言
  DDL(Data Definition Language commands) 数据定义语言
  TCC(Transaction Control commands)   事务控制语言
  SCC(System Control commands )     系统控制语言

一 DML数据操纵语言

  (一)数据查询命令

  select <查询内容>   From <表名>
  where <条件>   /*in,between,like%或_*/
  group by<分组内容>
  having<组内条件>
  order by<排序内容>[asc/desc];

  (二)数据更新命令

  1、数据插入命令

(1).具体的值插入表中
    Insert into <表名> [(列名表)]
      values<值表1>,<值表2>,<值表2>...
  (注: 日期,字符型值加引号)
  (2).将其它表满足条件的数据插入到一个表中
    Insert into <表名> [<列表名>] <select 子句>


  2、数据修改命令

  Update <表名> set <列名1>=<表达式1>,<列名2>=<表达式2>...[where<条件>];

  Update <表名> set <列名1>=(< select 子句 >) [where<条件>];

  3、数据删除命令

  Delete from <表名> [where<条件>];

二 DDL数据定义语言

  (一)、基本数据类型
  1.字符串
  字符串为一个字节序列,字符串的长度为序列中的字节数。如果长度为零,则该字符串的值称为空字符串。

  CHAR(x)   是固定长度字符串。(1=
  VARCHAR(x)   可变长度字符 x<=4000,x>254不能用group by ,order by,distinct 和除      
  union all以外的任何设置操作。

  GRAPHIC(x)   是固定图形字符串。(1=
  BLOB     二进制字符串,是一个字节序列,用于保存非传统数据,如图象、图形、声音等数据。

  2 数字 :所有数字都有符号和精度。精度是除开符号的位数或数字数。

  SMALLINT   小整数,是精度为5位的两字节整数。
  INTEGER   大整数,是精度为10位的四字节整数。
  REAL     单精度浮点数,是实数的32位近似值。
  DOUBLE   双精度浮点数,是实数的64位近似值,DOUBLE也称FLOAT。
  DECIMAL(p,s)   DECIMAL是一个十进制数。小数点的位置由数字的 精度(p)和小数位(s)    
  确定。精度是数字的总位数,必须小于32。小数位是小数部分数字的位数且总是小于或等于精度值。如果未指定精度和小数位,则十进制值的缺省精度为5,缺省小数位为0。

3 日期时间值 :日期时间值是日期、时间以及时间戳记的表示,日期时间值可以用于某些算术运算和字符串运算并且与某些字符串是相容的。

  DATE     由三个部分构成(年、月以及日)。
  TIME     使用24小时制,分为三个部分(小时、分钟以及秒)。
  IMESTAMP   分为七个部分(年、月、日、小时、分钟、秒以及微秒)。

  4空值     空值是一个区别于所有非空值的特殊值。它意味着行中的那一列无任何其
  它值。所有数据类型都存在空值。

(二)、数据定义
   1、Create (创建)
  创建表:
  Create table [<模式名>.]<表名>   (<列名1> <类型> [Null|Not null] [,<列
    名2> <类型>...]
  创建视图:  
  Create view [<模式名>.]<视图名> [<列名表>] as select 语句
  创建别名:  
  Create alias [<模式名>.]别名 for [<模式名>.]表名/视图名/别名
  创建索引:
  Create [unique] index <索引名> /*I_表名_字段名*/ on <表名>(<列名
    >[asc|desc]
  

创建模式:
CREATE SCHEMA 模式名   authorization 权限名
 2、Drop (摧毁)
  摧毁表:
  drop table [<模式名>.]表名
  摧毁视图:
  drop view [<模式名>.]视图名
  摧毁别名:
  drop alias [<模式名>.]别名
  摧毁触发器:
  drop trigger [<模式名>.]触发器名
  摧毁索引:
  drop index [<模式名>.]<索引名>
  摧毁包:
  drop package [<模式名>.]包名

  3、Alter (变更)
  增加表列:
  Alter table [<模式名>.]<表名> add column [<列名1> <类型> [Null|Not null]]...
  增加约束:  
  Alter table [<模式名>.]<表名> add constraint 列名 CHECK (约束)    
  删除约束:
  Alter table [<模式名>.]<表名> drop constraint 约束名    
  修改列类型:
  Alter table [<模式名>.]<表名> alter column 列名 set data type <类型>

  4、Grant (赋权)
  对[public/用户/组] 赋于在表上的[all/select/insert/update/delete] 权限:
  Grant [all/select/insert/update/delete] on [<模式名>.]表名to [public/用户/
    组];
  对[public/用户/组] 赋于在包上的[bind/execute/]权限:    
  Grant [bind/execute/] on package [<模式名>.][包名] to [public/用户/组];  
  对[public/用户/组] 赋于在索引上的[control]权限:
  Grant control on index [<模式名>.]索引名 to [public/用户/组]

  5、Revoke (回收)
  从public/用户/组] 回收在表上的[all/select/insert/update/delete] 权限:    
  Revoke [all/select/insert/update/delete] on [表名] from [public/用户/组];
  从public/用户/组] 回收在包上的[bind/execute/] 权限:
  Revoke [bind/execute/] on package [<模式名>.][包名]from [public/用户/组];
三 事务控制语言
  1.事务提交命令: Commit;
  2.事务回退命令: Rollback;

四 系统控制语言

  1.取消自动提交:
  Update command options using c off;
  2.连接数据库:
  Connect to 数据库名 user 用户 using 密码
  3.断开数据库连接:
  Connect reset
  Disconnect 数据库名
  4.列出数据库中的所有表:
  List tables for all
  5.列出数据库中的模式名为SCHEMA_name的所有表:
  List tables for SCHEMA SCHEMA_name
  6.查看表结构
  Describe table 模式名.表名
  Describe select * from 模式名.表名
  7.查看表的索引
  Describe indexes for table 模式名.表名

五 函数

  (一) 列函数
  列函数对列中的一组值进行运算以得到单个结果值。

  1.AVG
  返回某一组中的值除以该组中值的个数的和
  2.COUNT (*)
  返回非空列值的行数。
  3.MAX
  返回一组值中的最大值
  4.MIN
  返回一组值中的最小值
  5. MOD
  求余

  (二) 标量函数
  标量函数对值进行某个运算以返回另一个值。下列就是一些由DB2通用数据库提供的标量函数的示例。

  1.ABS
  返回数的绝对值
  2.HEX
  返回值的十六进制表示
  3.LENGTH
  返回自变量中的字节数(对于图形字符串则返回双字节字符数。)
  4.YEAR
  抽取日期时间值的年份部分
  5.NULLIF(a,b)
  如果a=b则值为空,否则值为a
  6.COALESCE(a,b,c)
  :返回第一个具有非空值的参数的值
  7.UCASE(str)
  小写字符转换成大写字符
  8.ICASE(str)
  大写字符转换成小写字符
  9.LOCAT(str1,str2,n)
  返回从第n个字符起,在str1中str2第一次出现的位置
  10.SUBSTR(str,m,n)
  返回从第m个字符起,,在str中的n个字符串

六 嵌入式SQL(SQLJ)

  将SQL语句嵌入应用程序时,必须按以下步骤预编译应用程序并将其与数据库联编:
  1.创建源文件,以包含带嵌入式 SQL 语句的程序
  格式: # SQL{ SQL语句 } 。
  2.连接数据库,然后预编译每个源文件。
  语法: SQLJ 源文件名

  例:
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();   }   }}

七 触发器
  建一个触发器,应包含以下部分:
  触发器名字
  触发器触发事件: insert,delete,update
  激活时间: before,after
  粒度: for each statement,for each row
  过渡变量:
  old row:表示触发事件之前被修改的值:
  new row表示触发事件之后被修改的值
  old table表示触发事件之前全部被修改行的一个只读假想表
  new table表示触发事件之后全部被修改行的一个假想表
  触发条件: 由WHEN开始,可包含一个或多个谓词,可包含过渡变量和子查询
  触发体: 由一个或多个SQL语句组成

例:
 
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

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有