1. 程式人生 > >id主鍵自增長那些事

id主鍵自增長那些事

http://blog.csdn.net/qiyuexuelang/article/details/9531891

  1. 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
     
  1. createsequence seq_test   
  2.      minvalue 100000  
  3.      maxvalue 600000  
  4.      start with 101000  
  5.      increment by 1  
  6.      catch 20  
  7.      cycle  
  8.      order;  


     
     2.Sequence使用
       Oracle等資料庫Sequence的引用引數為currval、nextval,分別表示當前id和下一個id
     select seq_test.nextval from dual;表示查詢下一個id值
     這樣若有表User,欄位有id(number)、username(varchar)、age(number),當儲存新資料時 可以SQL這樣寫:
  1. insertintoUser(id,username,age)values(seq_test.nextval,'qiyue',23);   

       看得出序列是獨立於表的存在。

     當然,如果你的id沒有限制的話,可以這樣寫

  1. createsequence seq_id start with 1;  


  二、indetity
      indetity可以被定義為指定的自增屬性,即只在其所在表有效,是依附於表的存在。
      
      1. DB2
         生成列和標識列
        generated by default as identity
        generated always as identity
       兩種不同的的定義方式,從字面意思可看出第一種在插入資料時允許手工指定自增欄位的值,只要不重複,資料庫會在下次存放資料時自動設定下一個值
       第二種則只能由資料庫自動分配並插入。
        舉例說明:
       
  1. createtableUser(id int generated bydefaultas identity,username char)  

      當指定插入default時,id為自增,從1開始
  1. createtableUser(id int generated always as identity ,username char )  

     

     這種方式只能指定插入default,如果指定id的值將會出錯

      
      2. MYSQL
       
  1. createtable table1(id int auto_increment primarykey,username char(30));  

        預設id從1開始自增
        如果你已建表且主鍵未自增,刪除主鍵,使用新增語句使表自增:

       
  1. altertable table2 add id int auto_increment primarykey;  

            一定要設定為主鍵,當前最大值當然是max(id)。

        插入資料的時候不需對自增欄位設值,如

  1. insertinto table1(username)values('qiyue');  

      
      3. SQLServer
     
  1. createtable testtable1(id int IDENTITY,department varchar(12) )  
  2.      select * from testtable1  
  3.      insertinto testtable1 values('設計')  
  4.      insertinto testtable1 values('市場')  
  5.      insertinto testtable1 values('售後')  
  6.       /*結果  
  7.        id department  
  8.        1 設計  
  9.        2 市場  
  10.        3 售後   
  11.       */  

        如果你要新建的表id有初始值 則表示為:id int identity(初始值,增量);