id主键自增长那些事

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


  1. create sequence 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. create sequence 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. insert into User(id,username,age)values(seq_test.nextval,'qiyue',23);   

       看得出序列是独立于表的存在。

     

     当然,如果你的id没有限制的话,可以这样写

  1. create sequence seq_id start with 1;  


  二、indetity
      indetity可以被定义为指定的自增属性,即只在其所在表有效,是依附于表的存在。
      
      1. DB2
         生成列和标识列
        generated by default as identity
        generated always as identity
       两种不同的的定义方式,从字面意思可看出第一种在插入数据时允许手工指定自增字段的值,只要不重复,数据库会在下次存放数据时自动设置下一个值
       第二种则只能由数据库自动分配并插入。
        举例说明:
       
  1. create table User(id int generated by default as identity,username char)  

      当指定插入default时,id为自增,从1开始

  1. create table User(id int generated always as identity ,username char )  

     

     这种方式只能指定插入default,如果指定id的值将会出错

      
      2. MYSQL
       
  1. create table table1(id int auto_increment primary key,username char(30));  

        默认id从1开始自增
        如果你已建表且主键未自增,删除主键,使用添加语句使表自增:

       
  1. alter table table2 add id int auto_increment primary key;  

            一定要设置为主键,当前最大值当然是max(id)。

        插入数据的时候不需对自增字段设值,如

    

  1. insert into table1(username)values('qiyue');  

      
      3. SQLServer
     
  1. create table testtable1(id int IDENTITY,department varchar(12) )  
  2.   
  3.   
  4.      select * from testtable1  
  5.      insert into testtable1 values('设计')  
  6.      insert into testtable1 values('市场')  
  7.      insert into testtable1 values('售后')  
  8.       /*结果  
  9.        id department  
  10.        1 设计  
  11.        2 市场  
  12.        3 售后   
  13.       */  

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值