文章目录
- 一、前言
- 二、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.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
- 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.新增表字段
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')
注: 该篇文章持续更新,若有朋友觉得文章不全或有不错内容想更新的,可私信或在评论区留言。