DB2难道不支持主键的AUTOINCREMENT嘛?

解决方案 »

  1.   

    有几种方法可以:
    1.(最简单的)每次插入前先select max(id) from tbl where算出最大值,不过你要保证以前数据库中的记录这一字段等长.(缺点:效率较低)
    2.就是靠数据库实现.(不过很不好意思DB2我不大了解!)
      

  2.   

    不好意思,忘记加1了.
    有几种方法可以:
    1.(最简单的)每次插入前先select max(id) from tbl where算出最大值再加1,不过你要保证以前数据库中的记录这一字段等长.(缺点:效率较低)
    2.就是靠数据库实现.(不过很不好意思DB2我不大了解!)
      

  3.   

    hehe db2是什么数据库,是小型的吧!
      

  4.   

    谢谢pengji(彭乃超)和kendyzheng了,看来得找数据库高手
      

  5.   

    谢谢kendyzheng和pengji(彭乃超)了,看来的找db2高手
    楼上的是学生吗?不知道db2......
      

  6.   

    应该有自动增长的主键设置!不过好像都是int型的,而不是String!
    oracle里有,sql server里也有,我想db2应该也有,不然……
      

  7.   

    是呀,好象这种自增长的字段一般都是非String类型的,如果要用String,可能要用我前面说的办法了!每次插入前先select max(id) from tbl where算出最大值再加1,不过你要保证以前数据库中的记录这一字段等长(长度不够前面加0).
      

  8.   

    to : pengji(彭乃超):先select max(id) from tbl where算出最大值再加1但数据库如果并行操作怎么办???我觉得这是退而求其之的下策!
      

  9.   

    当然要对表先进行LOCK喽,这不是最好的办法,但的确是可行的!哈哈!很多系统都是这样做的!ORACLE的sequence也不是String类型的,SQLSERVER也一样不是,如果要用String好象只有这种办法.
      

  10.   

    to : pengji(彭乃超):
    确实是这样,以前我也经常这样干的,没办法,但后来老是有并发的问题!比如销售同时输单。
    但你有没发现,竟然都是要加一的,为什么一定要用string类型的?难道用其它的就不行吗?
      

  11.   

    如果并发问题比较严重,你可以把select max(id) ......
    insert into ().....写在一个存储过程中来调用,不过还是要开启事务处理!
    如果不用STRING就简单的多了!
      

  12.   

    "写sql进数据库(DB2)怎样实现自动插入(表的主键为String)"
    如果在插入前,不用显示出来,其实还是挺好办的,那就是写一个函数,也是很容易解决的!
      

  13.   

    明白了,我还是把主键改成int,写函数又要增加开销了
    谢谢几伟大虾