虚位以待(AD)
虚位以待(AD)
首页 > 数据库 > DB2数据库 > DB2中列的唯一值的定义

DB2中列的唯一值的定义
类别:DB2数据库   作者:码皇   来源:http://blog.csdn.net/bobo12082119/article/details/8734679   点击:

DB2中列的唯一值的定义在定义表的时候,需要指定一个或者多个字段作为主键;定义为主键的列必须是not null,且unique;唯一值的列,及在所有的数据行中,该列的数据值不会重复;对于唯一值的列,DB2提供了如下几
DB2中列的唯一值的定义   在定义表的时候,需要指定一个或者多个字段作为主键;定义为主键的列必须是not null,且unique; 唯一值的列,及在所有的数据行中,该列的数据值不会重复; 对于唯一值的列,DB2提供了如下几种生成数据的方法。   1、IDENTITY列,数值型。 create table emp_info(        empno int not null                   generated as identity, --自动增长        empinfo_change timestamp,        ename varchar(20),        address varchar(30)       ) IDENTITY属性其实是一个自动增长的序列,默认startwith=1,increment=1,cache=20。 在添加数据的时候,不需要指定自动增长列的值,否则将会返回错误信息: insert into emp_info(empno,empinfo_change,ename,address)  values(101,current_timestamp,'SCOTT','CHANGCHUN JILIN CHINA') DB21034E  该命令被当作 SQL 语句来处理,因为它是无效的“命令行处理器”命令。在 SQL 处理期间,它返回: SQL0798N  不能为定义为 GENERATED ALWAYS 的列 "EMPNO" 指定值。  SQLSTATE=428C9   insert into emp_info(empinfo_change,ename,address)  values(current_timestamp,'SCOTT','CHANGCHUN JILIN CHINA') db2 => select * from emp_info EMPNO       EMPINFO_CHANGE             ENAME                ADDRESS ----------- -------------------------- -------------------- ------------------------------           1 2013-03-28-18.26.06.734000 SCOTT                CHANGCHUN JILIN CHINA   1 条记录已选择。   insert into emp_info(empinfo_change,ename,address)  values(current_timestamp,'ChenLinBo','CHANGCHUN JILIN CHINA') DB20000I  SQL 命令成功完成。 db2 => select * from emp_info EMPNO       EMPINFO_CHANGE             ENAME                ADDRESS ----------- -------------------------- -------------------- ------------------------------           1 2013-03-28-18.26.06.734000 SCOTT                CHANGCHUN JILIN CHINA           2 2013-03-28-18.27.04.408000 ChenLinBo            CHANGCHUN JILIN CHINA   2 条记录已选择。   2、FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP,timestamp类型。 对于timestamp类型的列,若想让此列自动填充当前时间戳的话,可以指定列的属性为: FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP。 这种类型的列,只能在定义或者修改表的时候新增列,否则一个timestamp类型的列定义之后,就无法修改为改属性了。 我们先将上表emp_info中的empinfo_change列删除,再增加一个timestamp类型的自动填充当前时间戳的列。 ALTER TABLE emp_info DROP COLUMN empinfo_change ALTER TABLE emp_info ADD COLUMN emp_info_chg timestamp NOT NULL  GENERATED ALWAYS   FOR EACH ROW ON UPDATE   AS ROW CHANGE TIMESTAMP 因为表的结构发生了变化,所以需要重构一下表;否则将会报错! reorg table emp_info 添加数据之后,如下: db2 => SELECT * FROM EMP_INFO EMPNO       ENAME                ADDRESS                        EMP_INFO_CHG ----------- -------------------- ------------------------------ --------------------------           1 SCOTT                CHANGCHUN JILIN CHINA          2013-03-28-19.41.18.777000           2 ChenLinBo            CHANGCHUN JILIN CHINA          2013-03-28-19.41.18.777001          22 yeeXun               changchun                      2013-03-28-19.41.24.175000          23 CSDN                 beijing                        2013-03-28-19.43.48.647000   4 条记录已选择。 修改表之后,emp_info_chg列自动填充了当前时间戳值。 db2 => update emp_info set address ='tianjin' where empno=2 DB20000I  SQL 命令成功完成。 db2 => select * from emp_info   EMPNO       ENAME                ADDRESS                        EMP_INFO_CHG ----------- -------------------- ------------------------------ --------------------------           1 SCOTT                CHANGCHUN JILIN CHINA          2013-03-28-19.41.18.777000           2 ChenLinBo            tianjin                        2013-03-28-20.25.39.736000          22 yeeXun               changchun                      2013-03-28-19.41.24.175000          23 CSDN                 beijing                        2013-03-28-19.43.48.647000   3、序列 序列用来实现列的自增长,可以再添加数据的时候使用序列,但是序列的属性一定为no cycle;下面是序列的两个伪列: next value:表示下一个序列值,可以使用nextval替代; previous value:表示当前序列值,可以使用currval替代。   来源:http://blog.csdn.net/bobo12082119/article/details/8734679
相关热词搜索: DB2 中 列