oracle中主键自增
来源:互联网 发布:26岁转行做程序员 编辑:程序博客网 时间:2024/04/27 16:32
下面用一个例子来说明自增主键的创建:
1、建用户数据表
drop table dectuser;
create table dectuser(
userid integer primary key, /*主键,自动增加*/
name varchar2(20),
sex varchar2(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,则触发器创建不了,还不明白这是为什么:(
FeedBack:
上学的时候给一个公司做网站,碰到过一个小问题:如何获得刚刚插入记录的自动生成的主键。
比如我要生成一个订单,那么需要往两张表插入记录:“订单表”和“商品项目表”(“商品项目表”以“订单表”的主键作为外键)。
当时我的做法非常的笨拙,插入记录后,根据多个条件将该记录的主键查询出来,呵呵;
后来为了避免这个问题,我就先把这个主键得到然后再进行插入,反正都够笨的。
我当时学习jdbc的时候看的 JDBC Database Programming with J2EE 这本书,当时我觉得够全的了,上面都没讲如何获得新纪录的自动生成主键,网上也没搜到,我以为就没办法了,前段时间写jdbc课件看api文档时才发现有相关支持,特发表此文,给刚入门的同学提个醒。
我们需要用到下面两个方法:
Connection接口定义的方法
- PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
- 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。
PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) 创建一个默认 PreparedStatement 对象,该对象能获取自动生成的键。
Statement接口定义的方法
- ResultSet getGeneratedKeys()
- 获取由于执行此 Statement 对象而创建的所有自动生成的键。
ResultSet getGeneratedKeys() 获取由于执行此 Statement 对象而创建的所有自动生成的键。
以下表为例:
- CREATE TABLE userinfo(
- id int IDENTITY(1,1) PRIMARYKEYNOTNULL,
- name varchar(50)NULL
- )
CREATE TABLE userinfo( id int IDENTITY(1,1) PRIMARY KEY NOT NULL, name varchar(50) NULL )
java代码实现:
- String sql = "insert into userinfo values ('张三')";
- PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
- stmt.executeUpdate();
- ResultSet rs = stmt.getGeneratedKeys();
- int newid = 0;
- 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 切换到列的模式,按列显示,就可以直接写语句了。
- oracle中主键自增
- oracle中主键自增
- oracle中设置自增主键
- oracle中创建自增主键
- oracle中设置自增主键
- oracle中设置自增主键
- oracle中设置自增主键简化
- oracle中设置自增主键
- oracle数据库中让主键自增
- oracle中设置自增主键
- Oracle中设置自增主键
- oracle中设置自增主键
- oracle中设置自增主键(id)
- oracle中设置自增主键
- Oracle中设置自增主键
- 在Oracle中设置主键自增
- oracle主键自增
- oracle 主键自增
- Linux--常用命令--date
- Linux设备模型<二>底层模型
- 程序什么时候应该使用线程,什么时候单线程效率高
- iphone SQLite3使用总结
- Fedora 14下的yum源
- oracle中主键自增
- vmware tools ,/mnt/hgfs 下没有共享文件夹,解决办法
- MySQL5.5编译工具configure向cmake过渡指南(转载)
- ofdm 2011.11.10
- Social Game与MMORPG在服务器架构上的差异
- Java反射研究(3)
- iphone Core Telephony
- android的两种异步机制
- 线程:Message和Runnable