oracle中主键自增

 

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

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 对象,该对象能获取自动生成的键。
 PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) 
 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。

Statement接口定义的方法

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

以下表为例:

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

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 切换到列的模式,按列显示,就可以直接写语句了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值