MySQL和Oracle中的自增长问题

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

MySQL中有个AUTO_INCREMENT属性,只需

create table tbname 
(
a_id unsigned int primary key auto_increment not null, 
a_title varchar(32), 
a_content text
);
注意:

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.首先建一张表:

CREATE TABLE Table1 

CID NUMBER(8) NOT NULL PRIMARY KEY, 
NAME VARCHAR2(20),
PW VARCHAR(10),
SEX VARCHAR(4), 
);
2.建立一个主键的序列范围:
CREATE SEQUENCE emp_sequence 

INCREMENT BY 1 -- 每次加几个 
START WITH 1 -- 从1开始计数 
NOMAXVALUE -- 不设置最大值 
NOCYCLE -- 一直累加,不循环 
NOCACHE -- 不建缓冲区
3.建立一个触发器:

CREATE TRIGGER user_id_trigger BEFORE

INSERT ON TABLE1 FOR EACH ROW
begin
select emp_sequence.nextval into :new.id from dual;
end;
注意:

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

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

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yang524505231/archive/2008/09/20/2956594.aspx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值