db2常用命令/db2常见报错

文章目录

    • 一、前言
    • 二、db2服务端常用命令
      • 2.1 启动/停止数据库
      • 2.2 连接数据库
      • 2.3 查看schema下所有表名
      • 2.4 查看表结构
      • 2.5 删除表数据
      • 2.6 导入导出del/ixf文件
        • 2.6.1 del与ixf区别
    • 三、db2客户端常用命令
      • 3.1 查看schema下所有表及每个表的记录数
      • 3.2 添加索引/查询索引/删除索引
      • 3.2 修改表字段,对表字段进行新增/修改/删除
      • 3.3 添加注释
      • 3.4 重构表
    • 四、db2常见报错
      • SQL0668N 不允许对表 "user" 执行操作,原因码为 "7"。 SQLSTATE=57016

一、前言

二、db2服务端常用命令

2.1 启动/停止数据库

启动: db2start
停止: db2stop

示例:

[calrm@centos firserver]$ db2stop
2023-05-21 16:25:30     0   0   SQL1025N  The database manager was not stopped because databases are still active.
SQL1025N  The database manager was not stopped because databases are still active.

[calrm@centos firserver]$ db2start
2023-05-21 16:28:42     0   0   SQL1026N  The database manager is already active.
SQL1026N  The database manager is already active.

[calrm@centos firserver]$ 

2.2 连接数据库

语法:db2 connect to [schema_name]
语法:db2 connect to [schema_name] user [数据库账号] using [数据库密码]

示例:db2 connect to student_db user root using root1234

2.3 查看schema下所有表名

list tables

2.4 查看表结构

db2 describe  table <table_name>

示例:db2 describe table user

2.5 删除表数据

1.truncate表数据

truncate table [tableName]  immediate

示例:truncate table user  immediate
  1. delete表数据
语法:delete from <table_name>

db2 “delete from user where id=‘907020000’ or id=‘907010000’”

2.6 导入导出del/ixf文件

导出导入del格式文件

db2 export to /home/xxxx.del of del select * from [tablename]
db2 import from /home/xxxx.del of del insert into [tablename]

导出导入ixf格式文件

db2 export to /home/xxxx.IXF of IXF select * from [tablename]
db2 import from /home/xxxx.IXF of IXF insert into [tablename]

2.6.1 del与ixf区别

  • del格式是一个文本文件,文件按行来存储,含有回车的文本内容在del文件中会另起一行,del文件可视。
  • ixf格式保存的是结构和数据,是一个二进制文件,ixf文件不可视。

del格式如下图:
在这里插入图片描述

三、db2客户端常用命令

3.1 查看schema下所有表及每个表的记录数

此命令可以用来查看schema下所有的表,以及查看表是否有记录

select tabname,card from syscat.tables where tabschema = '[schema name]'

tabname    表名
card       总行数

如: select tabname,card from syscat.tables where tabschema = 'manager';

-- 查看schema为manager下有记录的表
如: select tabname,card from syscat.tables where tabschema = 'manager' and card <> '0'

3.2 添加索引/查询索引/删除索引

1. 添加普通索引

语法:  create index  索引名 on 表名(列名,列名)

-- 添加一个组合索引
示例: create index  index_name_age  on user(name, age);

2. 添加唯一索引

语法:  create  unique index  索引名 on 表名(列名,列名)

-- 添加一个组合索引
示例: create unique index  uniq_name_age  on user(name, age);

3. 查询索引

语法:  select * from syscat.indexes where tabname = '表名';

4. 删除索引

drop index 索引名

3.2 修改表字段,对表字段进行新增/修改/删除

1.新增表字段

alter table <表名> add column <字段名>  <字段类型> default '0'

示例: alter table user add column user_name varchar(30) default '张三'

设置字段默认时间为当前时间
alter table [table_name] alter column [column_name] set default  current date;

注意:目前db2好像不支持添加字段到指定位置,所以添加的字段默认都是放在最后,若需要添加到指定的位置,可以考虑删除表后重新建表

2.删除表字段

alter table <表名> drop column <字段名> 

示例: alter table user drop column user_name 

注意:drop掉字段之后,可能会导致表查询/插入操作不能执行,需要对表进行reorg。

3.修改字段
注意:此操作需要执行重构表的语句,语句见本篇文章中的重构表内容

语法: alter table <TABLE_NAME> alter column <COLUMN_NAME> set data type <NEW TYPE>

示例:alter table user alter column user_name set data type varchar(100)

注意: 更改字段类型是有限制的,如将字段改为比之前类型长度大的可以,如果要改小或者修改小数点长度,必须先drop掉原来的column,然后再重新添加.

例如我要将一个Varchar(10)的字段改为Varchar(6) 或者将一个DECIMAL(14, 2)的字段改为DECIMAL(14, 4)等,均不能使用上述语句修改,另外改为不同的类型,也需要先drop掉column。

4.对已有字段重命名

alter table <table name> rename  column <column name> TO <new column name>

示例:alter talbe user rename column user_name to u_name

3.3 添加注释

1.对表添加/修改注释

COMMENT ON COLUMN 表名 IS '描述'

示例:comment on column user is '用户表'

2.对字段添加/修改注释

COMMENT ON COLUMN 表名.字段名 IS '表字段的描述'

示例:comment on column user.user_name is '用户名'

3.4 重构表

改变了字段的类型、字段的长度、改变了索引、删除表字段等都需要重构表, 否则执行数据插入/更新操作时可能会抛出异常

语法一:reorg table 表名
语法二:CALL SYSPROC.ADMIN_CMD(‘reorg table 表名’)

示例:CALL SYSPROC.ADMIN_CMD('REORG TABLE user')

四、db2常见报错

SQL0668N 不允许对表 “user” 执行操作,原因码为 “7”。 SQLSTATE=57016

报错内容:

SQL0668N  不允许对表 "student_db.user" 执行操作,原因码为 "7"SQLSTATE=57016

报错场景:

对user表新增了性别sex字段,类型设置为Integer, 后来更改了该字段类型为VARCHAR,然后执行update语句对数据进行更新时抛出了该错误。

解决方法:

先执行重构表操作后,再执行update语句。
重构表语法:CALL SYSPROC.ADMIN_CMD(‘reorg table 表名’)
示例:CALL SYSPROC.ADMIN_CMD('REORG TABLE user')





注: 该篇文章持续更新,若有朋友觉得文章不全或有不错内容想更新的,可私信或在评论区留言。

你可能感兴趣的:(数据库,数据库,db2)