mysql不像oracle那样需要单独创建sequence但也提供了2种方法来实现,第一种是auto_increment属性
第二种方法是单独建一张表来维护这些值...
请教下这2种方法在维护数据库方面的优劣,假设每个表的序列都是独立的...

解决方案 »

  1.   

    oracle里面的sequence,其实这样要自己每次调用nextval来取值,而在mysql里更方便,因为
    你可以直接利用mysql里面的auto_increment设置列就可以了,一样的功能。
      

  2.   

    但是NUMERIC类型的字段不能使用auto_increment属性原来oracle的脚本中数字类型全部使用的NUMBER,转成mySQL应该对应为NUMERIC如果要使用auto_increment属性的话,必须是int类型,而int类型最大支持  2147483647不知道bigint支不支持,稍后试一下...
      

  3.   

    oracle里面用NUMBER定义,一般这样 NUMBER(20)等等,这个就表示整型啦
    对应可以用mysql下的int或bigint等
      

  4.   

    bigint使用中和int有什么区别么?毕竟bigint是mysql扩展的,不是标准SQL数据类型?
    number(10)可以转换成int(10)么?int(10)的上限貌似没有number(10)大
      

  5.   

    如无特殊原因,一般来说,应该直接使用 auto_increment
    (某些特殊情况,比如两个表共用一个 序列号,则只能用第二种方法了)可以是 bigint, mysql> create table t1 (id bigint primary key auto_increment,f1 int);
    Query OK, 0 rows affected (0.08 sec)
      

  6.   

    刚试了一下bigint  确实可以使用auto_increment属性大概是看习惯了int,所以看到smallint或者tinyint之类的类型时总会觉得奇怪...这也算是一种歧视么 哈哈
      

  7.   

    浮点数也可以
    mysql> create table t2 (id DOUBLE  primary key auto_increment ,f1 int);
    Query OK, 0 rows affected (0.08 sec)mysql>
      

  8.   

    真奇怪...为啥只有NUMERIC不能用auto_increment属性... = =考虑使用bigint
      

  9.   

    用BIGINT吧,可以 支持到 18446744073709551615 
      

  10.   

    decimal / numeic 其实在存储上并不是数字,是一种结构。估计因为这个原因无法使用 auto_increment.
      

  11.   

    那个是unsigned的默认的话是到 -9223372036854775808~9223372036854775807声明unsigned的一个缺点就是如果有外键引用该列的时候,子表对应的列值也要声明成unsigned属性所以还是默认吧   谢谢vinsonshen和ACMAIN_CHM