Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to AUTO_INCREMENT in db2?

I thought this would be simple, but I can't seem to use AUTO_INCREMENT in my db2 database. I did some searching and people seem to be using "Generated by Default", but this doesn't work for me.

If it helps, here's the table I want to create with the sid being auto incremented.

  create table student(       sid integer NOT NULL <auto increment?>       sname varchar(30),       PRIMARY KEY (sid)       ); 

Any pointers are appreciated.

like image 509
Matt Avatar asked Nov 20 '12 03:11

Matt


People also ask

How do I turn on auto increment?

Syntax for Access Tip: To specify that the "Personid" column should start at value 10 and increment by 5, change the autoincrement to AUTOINCREMENT(10,5) . VALUES ('Lars','Monsen'); The SQL statement above would insert a new record into the "Persons" table. The "Personid" column would be assigned a unique value.

What is auto_increment?

Auto Increment is a field used to generate a unique number for every new record added into a table. This is generally used for the primary key column as it becomes easy for the developers to automatically generate a unique number for every new record.

How do I add an auto increment to an existing table?

To add a new AUTO_INCREMENT integer column named c : ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (c); We indexed c (as a PRIMARY KEY ) because AUTO_INCREMENT columns must be indexed, and we declare c as NOT NULL because primary key columns cannot be NULL .

How do you know if a primary key is auto increment?

Check if the table has any primary keys, and get them from the table_info table, using the query below: PRAGMA table_info("<table name here>"); 2. You can go through the returned results using a CURSOR , and only select ones that has "pk" column value different from 0, which indicates that is a Primary Key .


2 Answers

You're looking for is called an IDENTITY column:

create table student (    sid integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)   ,sname varchar(30)   ,PRIMARY KEY (sid) ); 

A sequence is another option for doing this, but you need to determine which one is proper for your particular situation. Read this for more information comparing sequences to identity columns.

like image 155
Ian Bjorhovde Avatar answered Sep 18 '22 19:09

Ian Bjorhovde


You will have to create an auto-increment field with the sequence object (this object generates a number sequence).

Use the following CREATE SEQUENCE syntax:

  CREATE SEQUENCE seq_person   MINVALUE 1   START WITH 1   INCREMENT BY 1   CACHE 10 

The code above creates a sequence object called seq_person, that starts with 1 and will increment by 1. It will also cache up to 10 values for performance. The cache option specifies how many sequence values will be stored in memory for faster access.

To insert a new record into the "Persons" table, we will have to use the nextval function (this function retrieves the next value from seq_person sequence):

  INSERT INTO Persons (P_Id,FirstName,LastName)   VALUES (seq_person.nextval,'Lars','Monsen') 

The SQL statement above would insert a new record into the "Persons" table. The "P_Id" column would be assigned the next number from the seq_person sequence. The "FirstName" column would be set to "Lars" and the "LastName" column would be set to "Monsen".

like image 40
Matt Avatar answered Sep 19 '22 19:09

Matt