DB2数据库

DB2

标签(空格分隔): 数据库


数据库状态横纵标

1、横表和纵表
横表就是普通的建表方式,如表结构为:主键、字段1、字段2、字段3…
纵表表结构为: 主键、字段代码、字段值。而字段代码则为字段1、字段2、字段3…。

横表
优点:一行表示了一个实体记录,清晰可见,一目了然。
缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。

纵表
优点:如果现在要给这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。

结论

应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
https://blog.csdn.net/zhangzeyuaaa/article/details/50675058

纵表转横标
有如下纵表:
1.png-4.6kB
将其转为横表:

select  
s.student_name,  
sum(case s.subject when '语文' then s.score end)  as 语文,  
sum(case s.subject when '数学' then s.score end)  as 数学,  
sum(case s.subject when '英语' then s.score end)  as 英语  
from score_vertical s  
group by s.student_name  

结果:

image.png-7.2kB

横表转纵表
有如下横表:
image.png-5.3kB

将其转为纵表:

select  s.student_name,  
'语文' as 科目,  
s.语文 as 成绩  
from score_horizontal s  

union all   

select  s.student_name,  
'数学' as 科目,  
s.数学 as 成绩  
from score_horizontal s  

union all   

select  s.student_name,  
'英语' as 科目,  
s.英语 as 成绩  
from score_horizontal s  

order by student_name, 科目  

结果:
image.png-7.2kB

数据库语法

1. 查询/删除/建立DB2数据表的主键
instancename:schema名称 tablename:表名 primarykeyname:
--CALL命令
call sysproc.admin('自己写的SQL命令');

一、查询表主键。

describe indexes for table <instancename>.<tablename>

例:这个命令在DbVisualizer中不能执行,在命令行中可以。
describe indexes for table db2inst1.aaa;

二、删除表主键。

alter table <instancename>.<tablename> drop primary key

例:

alter table db2inst1.aaa drop primary key



三、建立表主键。

alter table <instancename>.<tablename> add CONSTRAINT <primarykeyname> PRIMARY KEY (<columnname1>,<columnname2>

例:

alter table db2inst1.aaa add constraint aaa_pk primary key(id)

四、增加联合主键字段
1、第一步设置数据库要增加到联合主键的字段为null
ALTER COLUMN columnname SET DATATYPE VARCHAR(20) NOT NULL;
2、删除所有主键 参考上面
3、修改主键
4、CALL命令 重组表结构
CALL SYSPROC.ADMIN_CMD('REORG TABLE TABLENAME'); 
2.建表、表空间,添加字段,删除字段,修改字段,转换类型等
--创建数据库
create database Etp;

--创建数据库指定表空间。
tablespace:表空间名  indexspace:索引空间名
create table xxx(col1...) IN tablespace INDEX IN indexspace

--连接数据库
connect to Etp;

--断开连接
disconnect Etp;

--查看当前数据库下有哪些表
list tables;

--删除表
drop table SchemaName.TableName;

--复制表
CREATE TABLE SchemaName.新生成的表 LIKE SchemaName.原始表
INSERT INTO SchemaName.新生成的表 SELECT * FROM SchemaName.原始表;

--创建表的同时添加约束方式1
create table SchemaName.TableName(
 stuNo int not null,
 stuName varchar(8) not null,
 stuAge int,
 stuTel char(8),
 constraint pk_stuNo primary key(stuNo),
 constraint un_stuName unique(stuName),
 constraint ch_stuAge check(stuAge >=0 and stuAge <150)
);


--创建表的同时添加约束方式2(建议用第二种,简单便捷)
create table SchemaName.TableName(
 stuNo int not null primary key,
 stuName varchar(8) not null unique,
 stuAge int check(stuAge >=0 and stuAge <150),
 stuTel char(8)
);

--查看表结构
describe table SchemaName.TableName;

//字段的增删查改
alter table SchemaName.TableName add ColumnName DataType(长度);

--新增表字段
alter table SchemaName.TableName add stubirth date;

alter table SchemaName.TableName add abc int;

--删除字段
alter table SchemaName.TableName drop column abc;

--修改字段类型
alter table SchemaName.TableName alter column stutel set data type char(11);(颜色标记为,与SQL Server的区别)

2. 更改字段类型
alter table 表名称 alter column 字段名 set data type 类型(长度)

alter table table_name alter column column_test set data type VARCHAR(3);

--增加一个非空约束
alter table SchemaName.TableName alter column stutel set not null;(颜色标记为,与SQL Server的区别)

3. 转换字段数据类型
`proc` 要修改的字段名 varchar类型转换成小数类型
SELECT `proc` FROM `table` ORDER BY CAST(`proc` AS decimal) DESC;
3.树结构

查询一个顶级节点的名称

常见错误:

1、SQLCODE=-668, SQLSTATE=57016 表被挂起
  • DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016错误解决方法
    这个错误是:表处于”装入暂挂”状态。
经多次尝试 总结方法:

1:reorg table <表>; 假如不好使 则下面方法

2,先前尝试装入(LOAD)此表失败。表的状态应该是load pending;

你可以执行一下db2 "load query table <tabname>"命令来查看你的表状态。

然后用db2 "load from /dev/null of del terminate into <tabname>"这个命令来解挂。

 然后 reorg table <表>

3,恢复时候 没有指定过roll forward选项
是数据库的原因,因LOAD异常中断引起,可以用LOAD… TERMINATE 或者RESTART来解决.
先在C:建一个空文件test.txt,
然后db2 load from c:/test.txt of del terminate into tablename

然后 reorg table <表>
然后就可以了!

这几种方法尝试后OK。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值