`

DB2 自增长列导入、导出测试

阅读更多

DB2 自增长列测试

1当想将表中一列修改为自动增长时,可用下面命令:
Alter table <table name> alter column <column name> set not null
Alter table <table name> alter column <column name> set generated always as identity (start with 1,increment by 1)
上面命令是在改一表中列的属性时,在网上找到的很有用。

2当修改表中一列自动增长的开始值时,可用下面的命令:
ALTER TABLE <talbe_name> ALTER COLUMN <column name> RESTART WITH 18;

 

测试:

CREATE TABLE customer_orders_t (
order_id INT NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 1
NO MAXVALUE
NO CYCLE
NO CACHE
ORDER),
order_date DATE NOT NULL,
cust_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
status CHAR(9) NOT NULL,
PRIMARY KEY (order_date, order_id))


注:该列中的以及它本身的 IDENTITY 属性并没有保证所生成的序列值是唯一的。
但是, PRIMARY KEY 约束保证了表中行的唯一性。
为了确保只将自动生成的值插入标识列,他们指定了 GENERATED ALWAYS 子句。
使用最后一个生成的 order_id 来确定多少数据
选项 NO CACHE 和 ORDER 确保了在系统故障的情况下,不废弃未使用的标识值。

 

测试1

插入数据

insert into customer_orders_t values (default,current date,12,12,12,10.2,'2')

--成功


insert into customer_orders_t values (1,current date,12,12,12,10.2,'2')

-- 报错 因为:IDENTITY字段不允许指定值

--解决方案
ALTER TABLE customer_orders_t
ALTER COLUMN order_id
SET GENERATED BY DEFAULT


--创建orders_seq对象
CREATE SEQUENCE orders_seq
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
NO MAXVALUE
NO CYCLE
NO CACHE
ORDER


--插入数据
INSERT INTO customer_orders_t VALUES (NEXT VALUE FOR orders_seq, CURRENT DATE,12,12,12,10.2,'2')

 

1、命令行取sequence soc.nico_qian的下一个值:
db2 "values next value for soc.nico_qian"

2、命令行重置sequence soc.nico_qian:
db2 "alter sequence soc.nico_qian restart",重置后的值默认为创建SEQUENCE时的MINVALUE

3、命令行以指定值22重置sequence soc.nico_qian:
db2 "alter sequence soc.nico_qian restart with 22"

4、命令行重置表KS.CHECK_CONDITION的IDENTITY字段初始值为20:
db2 "ALTER TABLE KS.CHECK_CONDITION ALTER COLUMN identity_column_name RESTART WITH 20"

5、如果sequence被以命令行的方式重置,那么用到这个sequence的嵌入式C程序代码的绑定包
  的VALID字段会被修改为N,那么在下一次这个代码被调用的时候,DB2会自动重新绑定
   此代码的绑定包,这个动作会给应用程序带来不可预知的后果,比如:如果这段代码是在很
   频繁的被用到的时间段内被重新绑定,那么极易造成死锁。
   同样的问题会出现在IDENTITY字段上。

 

 

DB2自增加字段表 导入导出 测试

CREATE TABLE EMPLOYEE (SERIALNUMBERBIGINT NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1),
FIRSTNAMECHAR(64),
LASTNAMECHAR(64),
SALARY DECIMAL(10, 2),
PRIMARY KEY (SERIALNUMBER))


CREATE TABLE EMPLOYEE1(SERIALNUMBERBIGINT NOT NULL
GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1),
FIRSTNAMECHAR(64),
LASTNAMECHAR(64),
SALARY DECIMAL(10, 2),
PRIMARY KEY (SERIALNUMBER))


select * from EMPLOYEE;
select * from EMPLOYEE1;


identityignore 忽略自增identitymissing 自动生成自增identityoverride 使用自增

insert into db2admin.EMPLOYEE(FIRSTNAME,LASTNAME,SALARY)values ( 'A','AA',1);

insert into db2admin.EMPLOYEE(FIRSTNAME,LASTNAME,SALARY)values ( 'B','BB',2);

insert into db2admin.EMPLOYEE(FIRSTNAME,LASTNAME,SALARY)values ( 'C','CC',3);

--TEST 全量导出
db2 export to D:\PRODUCTION.ixf of ixf select * from db2admin.EMPLOYEE
--直接插入 报错 --不允许插入
db2 load CLIENT from D:\PRODUCTION.ixf of ixf replace into db2admin.EMPLOYEE1 NONRECOVERABLE
db2 import from D:\PRODUCTION.ixf of ixf insert into db2admin.EMPLOYEE1
--identityignore 忽略源自增字段 方式插入 --插入正常
db2 load CLIENT from D:\PRODUCTION.ixf of ixf modified by identityignore replace into db2admin.EMPLOYEE1 NONRECOVERABLE
db2 import from D:\PRODUCTION.ixf of ixf modified by identityignore commitcount 1000 insert into db2admin.EMPLOYEE1
--identitymissing 自动生成目标自增字段方式插入 --插入错位
db2 load CLIENT from D:\PRODUCTION.ixf of ixf modified by identitymissing replace into db2admin.EMPLOYEE1 NONRECOVERABLE
db2 import from D:\PRODUCTION.ixf of ixf modified by identitymissing commitcount 1000 insert into db2admin.EMPLOYEE1
--identityoverride 使用源自增字段方式插入 OK
db2 load CLIENT from D:\PRODUCTION.ixf of ixf modified by identityoverride replace into db2admin.EMPLOYEE1 NONRECOVERABLE


--TEST 部分导出
db2 export to D:\PRODUCTION_1.ixf of ixf select FIRSTNAME,LASTNAME,SALARY from db2admin.EMPLOYEE
--部分直接插入 OK
db2 load CLIENT from D:\PRODUCTION_1.ixf of ixf replace into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY) NONRECOVERABLE
db2 import from D:\PRODUCTION_1.ixf of ixf insert into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY)
--部分忽略源自增字段直接插入 OK
db2 load CLIENT from D:\PRODUCTION_1.ixf of ixf modified by identityignore replace into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY) NONRECOVERABLE
db2 import from D:\PRODUCTION_1.ixf of ixf modified by identityignore commitcount 1000 insert into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY)
--identitymissing 自动生成目标自增字段方式插入 OK
db2 load CLIENT from D:\PRODUCTION_1.ixf of ixf modified by identitymissing replace into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY) NONRECOVERABLE
db2 import from D:\PRODUCTION_1.ixf of ixf modified by identitymissing commitcount 1000 insert into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY)
--identityoverride 自动生成自增方式插入 --缺少字段错误
db2 load CLIENT from D:\PRODUCTION_1.ixf of ixf modified by identityoverride replace into db2admin.EMPLOYEE1( FIRSTNAME,LASTNAME,SALARY) NONRECOVERABLE

分享到:
评论

相关推荐

    db2数据库导入导出

    ### DB2数据库导入导出详解 #### 一、DB2数据库导出表结构与数据 在DB2数据库管理中,经常需要将表结构或者表中的数据进行导出以供备份或者迁移使用。以下是对DB2数据库导出表结构与数据的具体步骤及详细解释。 #...

    DB2导出、导入表结构、表数据及数据库安装小结(Windows环境)

    对于含有自增长字段的表,可以使用`MODIFIED BY IDENTITY IGNORE`选项: ``` DB2LOAD FROM [path(eg..D:/TABLE_NAME.IXF)] OF IXF MODIFIED BY IDENTITY IGNORE INSERT INTO TABLE_NAME; ``` ##### 2. 解除装入数据...

    DB2 的常用命令(教师专用)

    4. **数据的导入导出**: - 导出数据:DB2提供了多种导出格式,如`del`(逗号分隔值)、`ixf`(IBM索引交换格式)。例如,`export to E:\name.txt of del select * from tableName` 将`tableName`表中的所有数据...

    DB2数据库管理手册

    **3.7 导入导出数据** - **删除旧流水数据**: 清理不再需要的历史数据。 - **导出数据**: 将数据导出到文件或其他数据库,便于备份或迁移。 - **导入数据**: 从文件或其他数据库导入数据。 **3.8 权限管理** - **...

    db2DB2 V9表分区

    DB2 V9 还引入了附加和分离分区的 ALTER TABLE 语句,便于数据的导入和导出,这对数据仓库环境尤其有利,因为这种环境经常需要加载或删除数据以支持决策支持查询。 此外,表分区可以与其他数据组织方案结合,如与...

    db2常用语句

    以上知识点覆盖了DB2数据库日常管理和维护中的核心操作,包括数据导入导出、表结构管理、数据查询与分析、SQL脚本执行、高级数据操作、序列管理与索引查看、以及数据库重启与状态管理等各个方面。熟练掌握这些语句...

    db2 参考文档

    ### 三、数据导入导出 #### 1. **IMPORT** - **功能描述**:将数据导入到数据库中。 - **应用场景**:从其他系统迁移数据至DB2数据库。 - **注意事项**:确保数据格式符合DB2的要求。 #### 2. **EXPORT** - **...

    oracle 经典教程

    在使用EXP和IMP进行数据导入导出的过程中,可能会遇到各种问题,如权限不足、数据类型不兼容等。了解这些问题的原因和解决方法对于顺利完成数据迁移至关重要。 通过上述知识点的详细介绍,读者可以系统地学习Oracle...

    异构数据库的数据迁移.doc

    4. **数据导出导入工具**:如Oracle的SQL*Loader、DB2的LOAD、SQL Server的bcp等,快速但可能需要处理数据类型转换问题。 **迁移人员**:需要业务理解深入的开发人员和经验丰富的DBA协同工作,确保迁移过程中数据的...

    数据库(1).docx

    - **MySQL dump**:用于进行数据库和表的导出和导入,属于物理备份的一种方式,通常用于冷备份。 ### 15. MySQL dump备份与tar归档备份的区别 - **MySQL dump备份**:提供了更加精确的数据备份和恢复机制,特别...

    goldengate从入门到精通[借鉴].pdf

    2. **环境搭建**:包括非RAC和RAC环境下的GoldenGate复制环境建立,以及Oracle附加日志、CSN(Change System Number)的详细解析,数据初始化的各种方法,如使用自带的init load、RMAN和数据导入导出。 3. **组件...

    Mysql复制表结构、表数据的方法

    可以导出表结构,然后导入到新数据库,或者在命令行中直接操作,如`mysqldump old_db -u root -ppassword --skip-extended-insert --add-drop-table | mysql new_db -u root -ppassword`。 7. **复制整个数据库**:...

    Oracle 笔记.docx

    - **导入导出工具**:迁移数据。 - **数据库归档方式**:长期保存旧数据。 #### 六、JDBC部分 - **JDBC简介**:Java数据库连接API。 - **连接数据库**:建立与数据库的连接。 - **驱动程序与URL**:不同数据库的...

    数据库练习题.docx

    - **MySQL dump工具**: 用于进行数据库和表的导出和导入,属于物理备份、冷备份。 #### 十三、MySQL dump备份与tar归档备份的区别 - **MySQL dump备份**: 提供了更精确的数据备份和恢复机制。 - **tar归档备份**: ...

Global site tag (gtag.js) - Google Analytics