id主鍵自增長那些事
阿新 • • 發佈:2019-02-12
http://blog.csdn.net/qiyuexuelang/article/details/9531891
- createsequence seq_id start with 1;
很多id 愛好者 喜歡在新建資料庫表時,先新增id number欄位,為了方便插入資料,尤喜歡將id設為自增欄位。
那麼幾天在前輩的經驗之上總結一下那些能使欄位自增的方法
一、Sequence
Sequence是資料庫系統按照一定規則自動增加的數字序列。我們一般將此序列看做代理主鍵。要使用它的筒靴們要注意它所存在的資料庫有:Oracle、DB2、PostgreSQL。
而很多人熟悉的MySQL、SQL Server則沒有此序列。
以Oracle內的Sequence為例說明其使用方法:
1.定義Sequence
定義一個seq_test,最小值為100000 ,最大值為600000,從101000開始,增量為1,快取為20的迴圈排序Sequence
- createsequence seq_test
- minvalue 100000
- maxvalue 600000
- start with 101000
- increment by 1
- catch 20
- cycle
- order;
2.Sequence使用
Oracle等資料庫Sequence的引用引數為currval、nextval,分別表示當前id和下一個id
select seq_test.nextval from dual;表示查詢下一個id值
這樣若有表User,欄位有id(number)、username(varchar)、age(number),當儲存新資料時 可以SQL這樣寫:
- insertintoUser(id,username,age)values(seq_test.nextval,'qiyue',23);
看得出序列是獨立於表的存在。
當然,如果你的id沒有限制的話,可以這樣寫
- createsequence seq_id start with 1;
二、indetity
indetity可以被定義為指定的自增屬性,即只在其所在表有效,是依附於表的存在。
1. DB2
生成列和標識列
generated by default as identity
generated always as identity
兩種不同的的定義方式,從字面意思可看出第一種在插入資料時允許手工指定自增欄位的值,只要不重複,資料庫會在下次存放資料時自動設定下一個值
第二種則只能由資料庫自動分配並插入。
舉例說明:
- createtableUser(id int generated bydefaultas identity,username char)
當指定插入default時,id為自增,從1開始
- createtableUser(id int generated always as identity ,username char )
這種方式只能指定插入default,如果指定id的值將會出錯
2. MYSQL
- createtable table1(id int auto_increment primarykey,username char(30));
預設id從1開始自增
如果你已建表且主鍵未自增,刪除主鍵,使用新增語句使表自增:
- altertable table2 add id int auto_increment primarykey;
一定要設定為主鍵,當前最大值當然是max(id)。
插入資料的時候不需對自增欄位設值,如
- insertinto table1(username)values('qiyue');
3. SQLServer
- createtable testtable1(id int IDENTITY,department varchar(12) )
- select * from testtable1
- insertinto testtable1 values('設計')
- insertinto testtable1 values('市場')
- insertinto testtable1 values('售後')
- /*結果
- id department
- 1 設計
- 2 市場
- 3 售後
- */
如果你要新建的表id有初始值 則表示為:id int identity(初始值,增量);