- 浏览: 1239728 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (193)
- ant/maven (6)
- algorithm (5)
- tomcat/weblogic/jboss (6)
- javascript/jquery (13)
- java (33)
- flex/flash (0)
- JPA/Hibernate/myBatis (18)
- java concurrent (7)
- test (2)
- windows/linux (6)
- java collection (7)
- design pattern (2)
- life/health (3)
- database (12)
- IDE (4)
- spring/ejb (20)
- html/css/ckeditor (7)
- jsp/servlet (3)
- java io (13)
- java security (4)
- jni (0)
- svn/git (2)
- english (2)
- java jmx (1)
- xml (1)
- struts/springmvc (9)
- middleware (2)
- cache (1)
- cglib (3)
最新评论
-
jlotusYo:
博主,真感谢。
Java 密码扩展无限制权限策略文件 -
senninha:
这个。。是api说明吧。。
ScheduledExecutorService 源码分析 -
zoutao2008:
请问大文件如何处理?按你这种方式的话,文件超过200M时就会报 ...
hessian系列之二:上传文件 -
lwj1113:
lwj1113 写道谢谢博主这么细致的demo;在系列五中通过 ...
myBatis系列之五:与Spring3集成 -
lwj1113:
谢谢博主这么细致的demo;在系列五中通过testng测试类跑 ...
myBatis系列之五:与Spring3集成
1. 序列管理
创建从1开始,自增为1的序列:
查询序列:
查询当前值:
查询下一个值:
重设下一个值:
修改最大值:
注:
i. 不指定时的最大值将为序列类型的最大值:如果是INT,为2147483647;如果是BIGINT,为9223372036854775807
ii. MAXVALUE不可以写成分开的形式,否则报错
修改最小值:
注:
i. 修改最小值后,获取的下一个值会变为新的最小值
ii. 不指定时的最小值将为序列类型的最小值:INT和BIGINT都为1
iii. MINVALUE不可以写成分开的形式,否则报错
修改递增值:
此时序列的当前值会在前一个值的基础上加2
修改缓存:
注:不缓存时,缓存的数据个数为1
切换排序与否:
切换是否循环使用序列:
序列配置成不能循环使用时,获取超过最大值的下一个值会报错。如序列当前值为30,最大值为30,步进为1,获取NEXTVAL会报错
删除序列:
2. 表管理
创建表:
引号和大小写
表名和字段名加上引号时,DB2创建(修改)的表和字段的大小写和引号内的内容一致;
不加引号时,全部转成大写。
修改表:
删除表:
3. 批量插入
4. 数据复制
将t_a中除ID外的字段值拷贝到t_b中,t_b的ID为主键,由seq生成:
将t_a中除ID外的字段值更新到t_b中:
5. 分页查询
注:
OVER()的参数指定按什么字段来排序,可以为空。
可以用BETWEEN 21 AND 30来替换上面的分页条件。
6. 查询前几条记录
查询年龄在25岁以上的前三条记录:
a. FETCH
b. ROW_NUMBER()
查出25岁以上的男女前3条记录:
PARTITION的作用是把BY后面字段相同的数据放到一起,类似于GROUP BY的功能。区别是GROUP BY语句除了能使用聚集函数(COUNT等)外,只能检索GROUP BY后面的字段;而PARTITION没有此限制。
7. 模式管理
查询当前模式列表:
创建模式:
删除模式:
删除schema需要使用RESTRICT关键字,而且该schema中无对象存在。
8. 索引管理
创建索引:
在同一个Schema中,索引名称不能重复,否则创建失败。
逻辑:没有则创建;否则返回。所以重复执行创建语句是可以的。
如果要创建唯一索引,在INDEX前加入UNIQUE即可:
(唯一)索引可以建立在多个字段上:
还可以根据字段升(降)序来索引:
删除(唯一)索引:
删除不存在的索引会报错。
9. IF EXISTS
DB2不支持下面的写法:
10. 执行系统命令
在DB2客户端执行REORG等命令会报错,可以调用系统存储过程:
创建从1开始,自增为1的序列:
-- MySchema: 模式名,可以省略 -- MySeq: 序列名 CREATE SEQUENCE "MySchema"."MySeq" AS INTEGER START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE CACHE 20 NO ORDER
查询序列:
SELECT SEQNAME, INCREMENT, "START", MAXVALUE, MINVALUE, "CYCLE", CACHE, "ORDER" FROM sysibm.syssequences
查询当前值:
SELECT "MySchema"."MySeq".PREVVAL FROM sysibm.dual;
查询下一个值:
SELECT "MySchema"."MySeq".NEXTVAL FROM sysibm.dual;
重设下一个值:
-- 重设下一个值为168 ALTER SEQUENCE "MySchema"."MySeq" RESTART WITH 168 -- 重设下一个值,此时的下一个值为1 ALTER SEQUENCE "MySchema"."MySeq" RESTART
修改最大值:
-- 将序列的最大值改为99999 ALTER SEQUENCE "MySchema"."MySeq" MAXVALUE 99999 -- 不指定最大值 ALTER SEQUENCE "MySchema"."MySeq" NO MAXVALUE
注:
i. 不指定时的最大值将为序列类型的最大值:如果是INT,为2147483647;如果是BIGINT,为9223372036854775807
ii. MAXVALUE不可以写成分开的形式,否则报错
修改最小值:
-- 指定最小值为10 ALTER SEQUENCE "MySchema"."MySeq" MINVALUE 10 -- 不指定最小值 ALTER SEQUENCE "MySchema"."MySeq" NO MINVALUE
注:
i. 修改最小值后,获取的下一个值会变为新的最小值
ii. 不指定时的最小值将为序列类型的最小值:INT和BIGINT都为1
iii. MINVALUE不可以写成分开的形式,否则报错
修改递增值:
ALTER SEQUENCE "MySchema"."MySeq" INCREMENT BY 2
此时序列的当前值会在前一个值的基础上加2
修改缓存:
-- 缓存20个数据 ALTER SEQUENCE "MySchema"."MySeq" CACHE 20 -- 不缓存数据,可以写成NOCACHE ALTER SEQUENCE "MySchema"."MySeq" NO CACHE
注:不缓存时,缓存的数据个数为1
切换排序与否:
-- 排序 ALTER SEQUENCE "MySchema"."MySeq" ORDER; -- 不排序,可以写成NOORDER ALTER SEQUENCE "MySchema"."MySeq" NO ORDER;
切换是否循环使用序列:
序列配置成不能循环使用时,获取超过最大值的下一个值会报错。如序列当前值为30,最大值为30,步进为1,获取NEXTVAL会报错
-- 循环使用 ALTER SEQUENCE "MySchema"."MySeq" CYCLE; -- 不循环使用,可以写成NOCYCLE ALTER SEQUENCE "MySchema"."MySeq" NO CYCLE;
删除序列:
DROP SEQUENCE "MySchema"."MySeq"
2. 表管理
创建表:
CREATE TABLE person ( id BIGINT NOT NULL, name VARCHAR(20) NOT NULL, age SMALLINT, CONSTRAINT PK_PERSON PRIMARY KEY (ID) ) IN TBS_DAT_8K INDEX IN TBS_IDX_32K;
引号和大小写
表名和字段名加上引号时,DB2创建(修改)的表和字段的大小写和引号内的内容一致;
不加引号时,全部转成大写。
修改表:
-- person表重命名为t_b ALTER TABLE person RENAME TO t_b; -- 去除name的not null约束 ALTER TABLE t_b DATA CAPTURE none; ALTER TABLE t_b ALTER name DROP NOT NULL; ALTER TABLE t_b DATA CAPTURE CHANGES; -- 添加列sex和create_time,可以添加多个列,COLUMN可以省略 ALTER TABLE t_b ADD COLUMN sex CHAR(1) ADD create_time TIMESTAMP DEFAULT SYSDATE; -- 重命名列sex为gender ALTER TABLE t_b ALTER COLUMN sex gender CHAR(1); -- 修改列age的数据类型为整型 ALTER TABLE t_b ALTER age SET DATA TYPE INTEGER; -- 删除列create_time ALTER TABLE t_b DROP create_time;
删除表:
DROP TABLE t_b;
3. 批量插入
INSERT INTO t_b ( ID, NAME, AGE, GENDER ) VALUES ( MySeq.nextVal,'Lilei',22,'M' ) , ( MySeq.nextVal,'Lucy',18,'F' );
4. 数据复制
将t_a中除ID外的字段值拷贝到t_b中,t_b的ID为主键,由seq生成:
INSERT INTO t_b ( ID, NAME, AGE, GENDER ) SELECT MySeq.nextVal, NAME, AGE, GENDER FROM t_a;
将t_a中除ID外的字段值更新到t_b中:
UPDATE t_b b SET ( b.NAME, b.AGE, b.GENDER ) = ( SELECT a.NAME, a.AGE, a.GENDER FROM t_a a WHERE a.name = b.name FETCH FIRST 1 ROWS ONLY) -- Avoid multiple rows that causes the update failed WHERE -- The limit is necessary, otherwise it will update all the records in t_b b.ID IN ( SELECT b.ID FROM t_a a2 WHERE a2.name = b.name FETCH FIRST 1 ROWS ONLY)
5. 分页查询
SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY NAME ASC, AGE DESC) AS row_num, NAME, AGE FROM t_b) t WHERE t.row_num >= 21 AND t.row_num <= 30
注:
OVER()的参数指定按什么字段来排序,可以为空。
可以用BETWEEN 21 AND 30来替换上面的分页条件。
6. 查询前几条记录
查询年龄在25岁以上的前三条记录:
a. FETCH
SELECT * FROM t_b WHERE AGE > 25 ORDER BY AGE ASC FETCH FIRST 3 ROWS ONLY
b. ROW_NUMBER()
SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY AGE ASC) AS num, ID, NAME, AGE, GENDER FROM t_b WHERE AGE > 25) t WHERE num <= 3
查出25岁以上的男女前3条记录:
SELECT * FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY GENGER ORDER BY AGE ASC) AS num, ID, NAME, AGE, GENDER FROM t_b WHERE AGE > 25) t WHERE num <= 3
PARTITION的作用是把BY后面字段相同的数据放到一起,类似于GROUP BY的功能。区别是GROUP BY语句除了能使用聚集函数(COUNT等)外,只能检索GROUP BY后面的字段;而PARTITION没有此限制。
7. 模式管理
查询当前模式列表:
SELECT SCHEMANAME, OWNER, CREATE_TIME FROM syscat.schemata;
创建模式:
-- 显式创建 CREATE SCHEMA "MySchema"; -- 模式名:加引号会严格按照大小写;不加为全部大写 -- 隐式创建 CREATE TABLE "MySchema"."STRENGTH"(id INT, name VARCHAR(40));
删除模式:
DROP SCHEMA "MySchema" RESTRICT;
删除schema需要使用RESTRICT关键字,而且该schema中无对象存在。
8. 索引管理
创建索引:
在同一个Schema中,索引名称不能重复,否则创建失败。
CREATE INDEX "IDX_ACCOUNT_NO" ON "MySchema"."T_ACCOUNT" -- schema可以省略 ( "ACCOUNT_NO" )
逻辑:没有则创建;否则返回。所以重复执行创建语句是可以的。
如果要创建唯一索引,在INDEX前加入UNIQUE即可:
CREATE UNIQUE INDEX "IDX_ACCOUNT_NO" ON T_ACCOUNT ( ACCOUNT_NO )
(唯一)索引可以建立在多个字段上:
CREATE UNIQUE INDEX "IDX_ACCOUNT_NO" ON T_ACCOUNT ( COMPANY_ID, ACCOUNT_NO )
还可以根据字段升(降)序来索引:
CREATE UNIQUE INDEX "IDX_ACCOUNT_NO" ON T_ACCOUNT ( COMPANY_ID ASC, ACCOUNT_NO DESC )
删除(唯一)索引:
DROP INDEX "IDX_ACCOUNT_NO"
删除不存在的索引会报错。
9. IF EXISTS
DB2不支持下面的写法:
DROP TABLE IF EXISTS t_b
10. 执行系统命令
在DB2客户端执行REORG等命令会报错,可以调用系统存储过程:
CALL SYSPROC.ADMIN_CMD('REORG TABLE t_b');
发表评论
-
SQL CASE WHEN实例
2014-05-22 22:21 1565有三张表: 学生表student(stu_ ... -
truncate 和 delete 区别
2014-05-22 21:59 01. truncate是DDL (Data Definitio ... -
MySQL 触发器
2014-06-30 21:35 1329触发器的作用是在增、删、改操作之前(或之后)自动调用的 ... -
MySQL的连接字符串
2013-11-03 21:24 0driverClassName=com.mysql.jdb ... -
数据库索引
2012-10-17 15:43 01. 每张表的索引最好不要超过3个。过多的索引会占用较多的存储 ... -
mysql 参数设置
2012-08-11 21:07 10661. 最大允许的包大小 字段允许接受的最大长度。默认值是10 ... -
sql 语句使用
2012-05-17 10:35 13941. 有一张表t_stu;其中三个字段:name,gender ... -
[转]Mysql字符集设置
2012-05-13 21:11 1574MySQL的字符集支持(Character Set Suppo ... -
oracle安装及体系结构
2012-05-03 22:28 12311. 安装 数据库名:sid ( ... -
删除数据库中的重复记录
2012-05-04 10:01 1292准备数据 MySQL的表名和字段名默认为小写。 如果需要大写 ... -
sqlite常用命令
2012-04-26 16:22 10771. 显示加载的数据库名和文件 .databases ... -
OpenLdap安装与配置
2012-04-16 15:37 42991. 根据不同的运行平台,选择不同的OpenLdap安装软件安 ... -
OpenLdap配置ssl连接
2012-03-29 19:50 7380为了敏感数据(如账户 ... -
Access数据库SQL与数据类型
2012-03-13 22:16 10581. 在建表的时候,关键字不能用作field name,例如: ...
相关推荐
db2常用语句、db2常用语句、db2常用语句、db2常用语句、db2常用语句、db2常用语句、db2常用语句、db2常用语句
SQL_Server,Oracle,DB2数据库SQL语句比较
很好的东西,使用DB2必备.也可以作平常复习巩固用,免费分享给大家了……
DB2 SQL语句性能分析方法
DB2数据库SQL注入手册1
DB2中常用的SQL语句 经典SQL语句集锦 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
DB2 UDB SQL语句的生命周期.pdf
这是一位有经验的前辈对于DB2 sql 语句总结,个人觉得很不错。
SQL语句错误都可以在里边查到,偶然找到的和大家分享分享。
可以试试学习一下,不可以滥用, 猜用户表数量: and 0<(SELECT count(NAME) FROM SYSIBM.SYSTABLES where CREATOR=USER)
讲述了DB2的SQL语法,函数功能,语句块等。
DB2 怎么使用语句自动产生数据库 尤其当数据库没有测底删掉成功的时候
SQL_ServerDB2数据库SQL语句比较
DB2中SQL语句的简单用法,对于初学者的作用还是很明显的,可以了解到DB2中SQL语句的基本用法。
自己总结的关于 db2数据库当前日期和前一天日期的sql语句
DB2之SQL优化浅析,详细介绍了DB2的一些SQL语句的优化。
DB2比较常用与实用sql语句总结,学习与使用db2朋友可以参考下。
db2sql语句讲解,db2sql语句讲解