赞
踩
情况如下,oracle数据库,假设现在从user表查询数据有三条
ID | userName |
0 | 小明 |
1 | 小红 |
2 | 小张 |
此时想在PLSQL写insert语句插入一条新数据,ID为主键,肯定不能这么写:
insert into user(ID,userName) values (3,“小王”);
如果不清楚目前ID最大值是多少,那就会出现冲突。
解决方法:
1.如果这张表建了序列sequence,并且这个序列想让ID自增:
查询序列方法:
select * from user_sequences where sequence_name like '%seq_user%'
那么我的insert语句应该这么写:
insert into user(ID,userName) values (seq_user.nextval,“小王”);
2.如果没有建立序列,那么需要对这个user表建立一个序列:
create sequence seq_user
increment by 1
start with 1
minvalue 1
maxvalue 9999999
order
cache 20
cycle;
这是序列的含义:
和mysql中使用auto_increment不同,oracle中使用序列来实现主键自增,使用序列前必须要先创建一个序列
create sequence seq_users 序列名称
increment by 1 每次增长多少
start with 1 从几开始
minvalue 1 最小值
maxvalue 999999999 最大值
cycle/no cycle 序列到达最大值之后怎么办,一般去cycle
cache 20 需要不需要使用缓存,就是一次生成多少个序列的值,如果生成了多个序列值,如果缓存中有数据, 就
不需要查询缓存了
order/noorder 获取序列的时候是否按顺序给值。如果多用户一起获取序列的值,使用order可以保证序列值的顺
序按访问序列的事件排序。
创建好了以后,再插入数据:
insert into user(ID,userName) values (seq_user.nextval,“小王”);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。