oracle中主键自增

来源:互联网 发布:26岁转行做程序员 编辑:程序博客网 时间:2024/04/27 16:32
 

下面用一个例子来说明自增主键的创建:

1、建用户数据表
drop table dectuser;
create table dectuser(
userid integer primary key, /*主键,自动增加*/
name varchar2(20),
sex varchar2(2)
);

2、创建自动增长序列
drop sequence dectuser_tb_seq;
create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
increment by 1
start with 1; /*步长为1*/
3、创建触发器
create or replace trigger dectuser_tb_tri
before insert on dectuser /*触发条件:当向表dectuser执行插入操作时触发此触发器*/
for each row /*对每一行都检测是否触发*/
begin /*触发器开始*/
select dectuser_tb_seq.nextval into :new.userid from dual; /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
end;

/ /*退出sqlplus行编辑*/
4、提交
commit;

现在就完成了自增主键的设定,搞定!可以检测一下。
insert into dectuser(name,sex) values ('wang','女');

提示“已创建一行”,表示成功。呵呵:D

要注意的是主键数据类型如果为number,则触发器创建不了,还不明白这是为什么:(
posted on 2008-04-13 16:37 绿茶 阅读(2519) 评论(1) 编辑 收藏 所属分类: DataBase
<!---->

FeedBack:
#re: oracle中主键自增
2011-10-10 09:21 | isbing
主键为number类型可以自增的,不知道你是怎么用的不能自增,我一直都用number类型做主键
 
 
 
 
 
 
 
 
 

上学的时候给一个公司做网站,碰到过一个小问题:如何获得刚刚插入记录的自动生成的主键。

比如我要生成一个订单,那么需要往两张表插入记录:“订单表”和“商品项目表”(“商品项目表”以“订单表”的主键作为外键)。

当时我的做法非常的笨拙,插入记录后,根据多个条件将该记录的主键查询出来,呵呵;

后来为了避免这个问题,我就先把这个主键得到然后再进行插入,反正都够笨的。

我当时学习jdbc的时候看的 JDBC Database Programming with J2EE 这本书,当时我觉得够全的了,上面都没讲如何获得新纪录的自动生成主键,网上也没搜到,我以为就没办法了,前段时间写jdbc课件看api文档时才发现有相关支持,特发表此文,给刚入门的同学提个醒。

我们需要用到下面两个方法:

Connection接口定义的方法

Java代码 复制代码 收藏代码
  1. PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
  2. 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。

Statement接口定义的方法

Java代码 复制代码 收藏代码
  1. ResultSet getGeneratedKeys()
  2. 获取由于执行此 Statement 对象而创建的所有自动生成的键。

以下表为例:

Sql代码 复制代码 收藏代码
  1. CREATE TABLE userinfo(
  2. id int IDENTITY(1,1) PRIMARYKEYNOTNULL,
  3. name varchar(50)NULL
  4. )

java代码实现:

Java代码
  1. String sql = "insert into userinfo values ('张三')";
  2. PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
  3. stmt.executeUpdate();
  4. ResultSet rs = stmt.getGeneratedKeys();
  5. int newid = 0;
  6. if(rs.next()) newid = rs.getInt(1);

 

 

 

 

 

 

 

 

 

前几天在初始化话一个表的数据时,想利用已有的sequences插入数据:

insert
into TYPEOF_TOP500(ID,
ENTP_NAME,
COUNTRY,
INDUSTRY,
TURNOVER,
TOP_YEAR,
ORDER_VALUE,
IS_DEL) values(seq_base.nextval, 'xx', 'xx','xx',12.2, 2008,0, 0)

主要是利用红色字体的代码,让id自增。神奇的seq。

另外利用UltraEdit和excel初始化多个语句:

1、首先利用Excle将要初始化的数据另存为csv的格式

2、利用UltraEdit打开,然后按Alt+C 切换到列的模式,按列显示,就可以直接写语句了。