MySQL和Oracle中的自增长问题

·MySQL中的自增长问题比较简单

MySQL中有个AUTO_INCREMENT属性,只需

  1. createtabletbname
  2. (
  3. a_idunsignedintprimarykeyauto_incrementnotnull,
  4. a_titlevarchar(32),
  5. a_contenttext
  6. );

注意:

1.把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做。

2.如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

3.AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。

4.AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

5.AUTO_INCREMENT数据列必须具备NOT NULL属性。

6.AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

·Oracle中比较复杂,需要用触发器和序列来完成

1.首先建一张表:

  1. CREATETABLETable1
  2. (
  3. CIDNUMBER(8)NOTNULLPRIMARYKEY,
  4. NAMEVARCHAR2(20),
  5. PWVARCHAR(10),
  6. SEXVARCHAR(4),
  7. );
2.建立一个主键的序列范围:
CREATESEQUENCEemp_sequence
INCREMENTBY1--每次加几个 STARTWITH1--从1开始计数 NOMAXVALUE--不设置最大值 NOCYCLE--一直累加,不循环 NOCACHE--不建缓冲区

3.建立一个触发器:

CREATETRIGGERuser_id_triggerBEFORE
INSERTONTABLE1FOREACHROW begin selectemp_sequence.nextvalinto: new .idfromdual; end;

注意:

1.“:new”是一个整体,不要写错了!!!

2.在程序中还可以直接用"emp_sequence.nextval"来代替主键值。

你可能感兴趣的:(database)