DB2序列和主键自增长

1、把主键定义为自动增长标识符类型

在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:

create table customers(id int auto_increment primary key not null, name varchar(15));

insert into customers(name) values("name1"),("name2");

select id from customers;

以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值。最后查询表中id字段,查询结果为:

id

1

2

由此可见,一旦把id设为auto_increment类型,mysql数据库会自动按递增的方式为主键赋值。

在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如:

create table customers(id int identity(1,1) primary key not null, name varchar(15));

insert into customers(name) values("name1"),("name2");

select id from customers;

查询结果和mysql的一样。由此可见,一旦把id设为identity类型,MS SQLServer数据库会自动按递增的方式为主键赋值。identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。

在DB2中,如果把表的主键设置为:
UserID   integer   not   null   generated   always   as   identity   (start   with   1,increment   by   1),

2、从序列中获取自动增长的标识符

1、序列定义    
   ORACLE:

CREATE SEQUENCE <sequence_name>

INCREMENT BY <integer>

START WITH <integer>

MAXVALUE <integer> / NOMAXVALUE

MINVALUE <integer> / NOMINVALUE

CYCLE / NOCYCLE

CACHE <#> / NOCACHE

ORDER / NOORDER;   
    
   DB2:

CREATE SEQUENCE <sequence-name>

AS data-type                           默认 As Integer
              START WITH <numeric-constant>   
          INCREMENT BY <numeric-constant>               默认 INCREMENT BY 1
           MINVALUE <numeric-constant> | NO MINVALUE    默认 NO MINVALUE
           MAXVALUE <numeric-constant> | NO MAXVALUE    默认 NO MAXVALUE
           NO CYCLE | CYCLE                             默认 NO CYCLE
           CACHE <numeric-constant> | NO CACHE          默认 CACHE 20
           NO ORDER | ORDER                             默认 NO ORDER

2、序列取值
   取下一个值:
      ORACLE: 序列.NEXTVAL
      DB2:    NEXTVAL FOR 序列 或 NEXT VALUE FOR 序列
   取当前值:
      ORACLE: 序列.CURRVAL
      DB2:    PREVIOUS VALUE FOR 序列  或 PREVVAL FOR 序列

3、序列设置开始值
     ORACLE:取得下一个值;先设置步长(下一个值 与 设置的开始值之间差);取得下一个值;再把步长修改成原来值
     DB2:ALTER SEQUENCE 序列名  RESTART WITH 下一值

4、修改
     ORACLE:
 修改最大值    ALTER SEQUENCE <sequence_name> MAX VALUE <integer>
 修改最小值: ALTER SEQUENCE <sequence_name> MIN VALUE <integer> (此值需要比当前值小)
 修改步长:    ALTER SEQUENCE <sequence_name> INCREMENT BY <integer>;
 修改CACHE值: ALTER SEQUENCE <sequence_name> CACHE <integer> | NOCACHE
 修改循环属性:  ALTER SEQUENCE <sequence_name> <CYCLE | NOCYCLE>
 修改排序属性:ALTER SEQUENCE <sequence_name> <ORDER | NOORDER>

DB2: 
 修改最大值:   ALTER SEQUENCE <sequence_name> MAX VALUE <numeric-constant> | NO MAXVALUE
 修改最小值:   ALTER SEQUENCE <sequence_name> MIN VALUE <numeric-constant> | NO MINVALUE (此值需要比当前值小)
 修改步长:    ALTER SEQUENCE <sequence_name> INCREMENT BY <numeric-constant>;
 修改CACHE值: ALTER SEQUENCE <sequence_name> CACHE <numeric-constant> | NO CACHE
 修改循环属性: ALTER SEQUENCE <sequence_name> <CYCLE | NO CYCLE>
 修改排序属性:ALTER SEQUENCE <sequence_name> <ORDER | NO ORDER>
 从新计数:    ALTER SEQUENCE <sequence_name> RESTART | RESTART WITH <numeric-constant>

5、DROP 
    ORACLE: DROP SEQUENCE <sequence_name>; 
    DB2:    DROP SEQUENCE <sequence_name>;

6、例句

CREATE SEQUENCE JOBSHOW_SEQ
  AS INTEGER
  CACHE 20
  MAXVALUE 999999
  ORDER;
  
  CREATE SEQUENCE JOBWORK_SEQ
  AS INTEGER
  CACHE 20
  MAXVALUE 999999
  ORDER;
  
  CREATE SEQUENCE YN_SEQ
  AS INTEGER
  MAXVALUE 99999999;
  
  select  yn_seq.nextval from YNZP_JOB_JOBINFO

select  nextval for KFCMCC_SEQ from  sysibm.sysdummy1

时间: 2024-10-18 20:51:54

DB2序列和主键自增长的相关文章

使用pl/sql的文本导入器时如何设置主键自增长

在使用文本导入器批量导入数据时,如果需要设置主键自增长,可以先创建一个序列: create sequence SEQ_Userinf start with 1 increment by 1nomaxvaluenominvaluenocache; 然后在导入时设置主键字段的sql函数为:SEQ_Userinf.nextval就可以了.

oracle,mybatis主键自增长

<insert id="insert" parameterType="resource"> <selectKey resultType="long" order="BEFORE" keyProperty="id"> SELECT sys_resource_id_SEQ.NEXTVAL AS id FROM DUAL </selectKey> INSERT INTO <

Oracle实现主键自增长

MySql中在字段定义后面使用 AUTO_INCREMENT 属性实现自增长,Oracle如何实现主键自增长? 建表: create table users(   userId number(10) not null,   username varchar2(30) not null,   birthday date default null,   sex char(1) default 1 check (sex in (0, 1)),   address varchar2(200) not n

Mysql,SqlServer,Oracle主键自动增长的设置

1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如:   customers(id  auto_increment    , name (  customers(name)  id  customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值.最后查询表中id字段,查询结果为: 由此可见,一旦把id设为auto_increment类型,mys

JAVA中JPA的主键自增长注解设置

JPA的注解来定义实体的时候,使用@Id来注解主键属性即可.如果数据库主键是自增长的,需要在增加一个注解@GeneratedValue,即: 1 @GeneratedValue(strategy=GenerationType.IDENTITY) 2 @Id 3 private String id; PS:@GeneratedValue注解的strategy属性提供四种值: –AUTO: 主键由程序控制,是默认选项,不设置即此项. –IDENTITY:主键由数据库自动生成,即采用数据库ID自增长的

Mybatis操作数据库实现主键自增长

(一)oracle中没有主键自增长,所有可以通过创建序列或使用触发器实现 1.先创建表 CREATE TABLE USER1 ( ID NUMBER(10), NAME VARCHAR2(20), SEX VARCHAR2(5), ADDRESS VARCHAR2(30), BIRTHDAY DATE ) 2.创建序列: CREATE SEQUENCE user1_sequence INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 10; 3.在配置文件中配制 <i

表主键自增长Mybatis插入数据报错

在使用MyBatis进行开发的过程中,当你遇到向某张数据库表中插入一条记录时,出现数据插入不正确,如果自己确定是因为主键的原因,类似如下错误提示: 而你的本意是主键自动增长,那么,可参考如下方法尝试解决: 第一步:在配置中设置主键为自增长(数据库我使用的是MySql) 如果你是使用MyBatis自动生成的插入语句,除了设置上面给出的useGeneratedKeys="true"之外,还需要将如下图所示红色部分去掉,这是查询主键最大值的一段代码. 如果还未解决,这时你应该检查一下你的数据

mybatis配置oracle的主键自增长

引用自:https://hacpai.com/article/1405392025960 mysql.sqlserver等数据库本身带有主键自增长像auto_increment的功能可以直接使用 useGeneratedKeys=”true”来实现,比如下面的配置 <insert id=”add” useGeneratedKeys=”true” keyProperty=”id” parameterType=”Auth”> insert into s_user_auth (id,user_id,

mysql设置主键自动增长

创建数据库,创建表. Sql代码   mysql> create database ssh2; Query OK, 1 row affected (0.04 sec) mysql> use ssh2; Database changed mysql> create table user( -> id integer primary key, -> firstname varchar(200) not null, -> lastname varchar(200) not n