SERIAL datatype in Postgres - sql

The use of SERIAL datatype is to auto increment the value, so there is no need to specify the value during insertion of values. If we create a
table and insert value to that table, by default values starts from 1 for SERIAL column datatype. But Instead of 1 is there any way to start the value from 100 and increment by 10 as default value?

Serial is just syntactic sugaring on top of an int column that takes its value from a sequence. While you can't control a serial column's definitions directly, you could use an explicit sequence definition instead:
CREATE SEQUENCE tablename_colname_seq INCREMENT BY 10 START WITH 100; -- Here!
CREATE TABLE tablename (
colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;

You can alter your existing sequence(not matter whether its serial or what) like below
ALTER SEQUENCE mytbl_id_seq INCREMENT 10 RESTART with 100
When creating a table
create table mytbl (id serial,val int)
a sequence will automatically creates i.e
CREATE SEQUENCE mytbl_id_seq
INCREMENT 1
START 1
so you can alter this with your desired values i.e
ALTER SEQUENCE mytbl_id_seq
INCREMENT 10
RESTART with 100
sqlfiddle-demo

Related

Oracle SQL - Create Sequence and add sequence values on new column

I have the following table called table_1
I create a new column_3
then I create a sequence
CREATE SEQUENCE "sequence_1" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOPARTITION
and I alter the table_1 so the default for new values on column_3 are the the values of the sequence.
ALTER TABLE table_1 MODIFY column_3 DEFAULT sequence_1.NEXTVAL
How can I replace the existing null values on column_3 with the values from this sequence? The final result should be:
If your DB version is 12c+, then adding an identity column will handle what's needed such as
ALTER TABLE table_1 ADD new_id INT GENERATED ALWAYS AS IDENTITY
where
using GENERATED and AS IDENTITY are mandatory
There are three following options [ ALWAYS | BY DEFAULT [ ON NULL ] ].
A value for the identity column is always generated if the ALWAYS option is used as in this case. Attempt to insert a value into the identity column will cause an error.
No need to use START WITH and INCREMENT BY options for the
current case. Since those are already 1 as default
Demo
Solution I came up with is the following - happy to accept better answers:
ALTER TABLE table_1 ADD column_3 NUMBER(38,0) DEFAULT sequence_1.NEXTVAL NOT NULL

How to get sequence start value from another table's max value

I'm trying to insert a bunch of values in a table but it doesn't have IDENTITY column, and I need to insert a unique value in that field.
And the sequential number should be start based on the previous value present in that same field.
lets say I have a table like this
create table testTable (id int, fieldA varchar (20))
insert into testTable
values (6,'Nick'),(7,'Tom')
Now the next value I insert in ID field should take be 8 and next row should be 9 and so on...
And below is the sequence I created; and is not working
CREATE SEQUENCE testTable_seq
declare #maxy int = ((select max(ID) from testTable) + 1)
START WITH #maxy
INCREMENT BY 1
I expect the below insert should get the next value from the sequence I created or just tto get the next sequential number from previous ID field
insert into testTable
values (testTable_seq.next value,'Harry')
You can't do that, if you see the arguments in the docs CREATE SEQUENCE it already stated that the value of START WITH should be a constant value, same as INCREMENT BY, MINVALUE and MAXVALUE
START WITH constant
I don't understand why you want to create a SEQUENCE to insert values into a table, and also MAX() won't do as you expect, instead you can simply
CREATE TABLE TestTable(
ID INT IDENTITY(1, 1) NOT NULL,
AColumn VARCHAR(20),
CONSTRAINT PK_TestTable_ID PRIMARY KEY(ID)
);

HSQLDB - link several sequences for several columns of the table

I would like to link several sequences for generating default values for several columns of a table.
For example:
CREATE SEQUENCE seq1 START WITH 1;
CREATE SEQUENCE seq2 START WITH 1;
CREATE TABLE mytable (rid int GENERATED BY DEFAULT AS SEQUENCE seq1 PRIMARY KEY, p63 int GENERATED BY DEFAULT AS SEQUENCE seq2)
Unfortunately, an error is occured: "identity definition not allowed"
In Postgresql is working.
Any idea ?
Thanks
The first use of the sequence is allowed. You can write a BEFORE INSERT TRIGGER to insert sequence values into the second column.
Having the same issue, I came upon this post. I used another workaround :
CREATE SEQUENCE seq1 START WITH 1;
CREATE SEQUENCE seq2 START WITH 1;
CREATE TABLE mytable (
rid int DEFAULT nextval('seq1') NOT NULL,
p63 int NOT NULL
);
ALTER TABLE mytable ALTER p63 SET DEFAULT NEXTVAL('seq2');
Altering the p63 column after table creation made possible to use the seq2 sequence while it was not accepted when creating the table.

SQL Server Database unique number generation on any record insertion

I have like 11 columns in my database table and i am inserting data in 10 of them. i want to have a unique number like "1101 and so on" in the 11th column.
Any idea what should i do?? Thanks in advance.
SQL Server 2012 and above you can generate Sequence
Create SEQUENCE RandomSeq
start with 1001
increment by 1
Go
Insert into YourTable(Id,col1...)
Select NEXT VALUE FOR RandomSeq,col1....
or else you can use Identity
Identity(seed,increment)
You can start the seed from 1101 and increment the sequence by 1
Create table YourTable
(
id INT IDENTITY(1101,1),
Col varchar(10)
)
If you want to have that unique number in a different field then you can manipulate that field with primary key and insert that value.
If you want in primary key value, then open the table in design mode, go to 'Identity specification', set 'identity increment' and 'identity seed' as you want.
Alternatively you can use table script like,
CREATE TABLE Persons
(
ID int IDENTITY(12,1) PRIMARY KEY,
FName varchar(255) NOT NULL,
)
here the primary key will start seeding from 12 and seed value will be 1.
If you have your table definition already in place you can alter the column and add Computed column marked as persisted as:
ALTER TABLE tablename drop column column11;
ALTER TABLE tablename add column11 as '11'
+right('000000'+cast(ID as varchar(10)), 2) PERSISTED ;
--You can change the right operator value from 2 to any as per the requirements.
--Also replace ID with the identity column in your table.
create table inc
(
id int identity(1100,1),
somec char
)

How to insert an increment value via SQL

I have a column in my database. How do i insert an incremented number via an insert so it fills it every row?
Use Identity column
Suppose you want Column Id to be incremented automatically a row is inderted define it as identity
ID INT IDENTITY (1,1)
First 1 is starting value second 1 is seeding it means increment by which integer
in this case the value will start at 1 and increment by 1 every time u insert a new row.
Please let me know if any further help needed
You may go to the designer of the table add a new Column and then go to the properties tab for the column and set
Identity Specification
IsIdentity :Yes
Identity Increment : 1
Identity Seed : 1
Identity Increment sets the number that will be added each time you insert a row. If it was 10 then you would have ids like 10, 20, 30.
Identity Seed is an offset you may need to add (which is the first number to appear) If it was 10 then your first Id would be 10.
Set identity seed for the column you want to increment the value
Alter Table Names Add Id_new Int Identity(1, 1) Go
Alter Table Names Drop Column ID Go
Exec sp_rename 'Names.Id_new', 'ID', 'Column'
When creating a new table, set the Data Type field to int and de-select Allow Nulls for that column.
Then, in column Properties, expand Identity Specification and change (Is Identity) to Yes.
By default the Identity Increment should be set to 1.
Make that column identity while creating the table which will auto increment that column for each row. You don't have to do explicit insert.
Create auto increment for that column for example
CREATE TABLE table_name
(
id int NOT NULL IDENTITY (1, 1),
name varchar(50) NULL
) ON [PRIMARY]
In the above example column id is auto increment. After each insert its value will increment by 1.
If you want to change that increment number later, please check
Reset AutoIncrement in SQL Server after Delete