oracle 中键表 怎么创建id自动增长

自学oracle真的老火啊,请大家帮个帮说下如createtablesectable(secidintegerprimarykey,secnamenvarchar2(20... 自学oracle 真的老火啊,
请大家帮个帮说下

create table sectable
(
secid integer primary key,
secname nvarchar2(20) not null
)
我要怎么创建 id为 自动增长列
网上直接复制过来的代码就别来了,我都看过了还是不懂.

请把每个关键字说清楚,最好小写,
谢谢.
展开
 我来答
木叶猴
2008-11-28 · TA获得超过133个赞
知道小有建树答主
回答量:102
采纳率:0%
帮助的人:129万
展开全部
创建一个序列就可以了!
create sequence sequence_name
increment by 1 -- 每次加几个
start with 1 -- 从1开始计数
nomaxvalue -- 不设置最大值
nocycle -- 一直累加,不循环
cache 10; -- 缓冲区大小

比如你在一个表里面有个一个ID值需要自动的增加的话!
create table stu_name(
sid number primary key,
name varchar2(20),
age number
);
就比如说你有怎么一个表
在以前插数据的时候你应该这么写
insert into stu_name(1,'heihei',20);
但是如果你有了序列的话id值就不用你自己操心了 担心他冲突你应该怎么写
insert into stu_name(sequence_name.nextval,'heihei',20);
这样来保证你的id值不会冲突!!!
xinsihaitree
2008-11-19
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
在oracle 9i里主键的自动增长
关键字: 在oracle 9i里主键的自动增长
必须创建序列,因为9I版本里没有自动增长
CREATE SEQUENCE seq_表名_字段名
INCREMENT BY 1
START WITH 1
MINVALUE 1
NOCACHE

create or replace trigger yao_tri
before insert on 表名
for each row
begin
select yao_seq.nextval into :new.id from dual;
end yao_tri;

例如:

SQL> create sequence seq_Addressbook_
2 increment by 1
3 start with 1
4 minvalue 1
5 nocache;

SQL> create or replace trigger gaijing
2 before insert on Addressbook
3 for each row
4 begin
5 select seq_Addressbook_id.nextval into :new.id from dual;
6 end gaijing;
7 /

触发器已创建

===========================================--

在oracle 9i里主键的自动增长-2
关键字: 在oracle 9i里主键的自动增长-2
SQL> create table T_text
2 (
3 ID number(4) NOT null,
4 UserName varchar2(50) not null,
5 Password varchar2(50) not null,
6 primary key(ID)
7 );

表已创建。

SQL> create sequence Seq_T_text
2 increment by 1
3 start with 1
4 maxvalue 9999
5 cycle nocache;

序列已创建。

SQL> create or replace trigger bef_ins_T_text
2 before insert on T_text
3 referencing old as old new as new
4 for each row
5 begin
6 select Seq_T_text.nextval into:new.ID from dual;
7 end;
8 /

触发器已创建

SQL> insert into T_text(Username,Password)values('gj','gj');

已创建 1 行。

SQL> select * from T_Text;

ID USERNAME
---------- --------------------------------------------------
PASSWORD
--------------------------------------------------
1 gj
gj

======================================================================

在oracle 9i里主键的自动增长-3(一个自动增长的有序编号的触发器)
关键字: 在oracle 9i里主键的自动增长-3(一个自动增长的有序编号的触发器)
一个自动增长的有序编号的触发器

在**常使用中,经常会见到形如这样的编号:
20070600001 2000700002 20070600003
到了下一个月就成为:
20070700001
也就是说每月都有一个有规律的编号,可以很清晰的看出编号是在哪能个月
插入的。类似这样的功能,在Oracle中应该用触发器来实现
1,创建表
SQL> create table T_text2
2 (
3 eno varchar(12) primary key,
4 ename varchar2(20)
5 );

表已创建。

2。创建触发器

SQL> create or replace trigger eno_auto_increment
2 before insert on T_text2
3 for each row
4 declare
5 olddate number(6);
6 newdate number(6);
7 oldeno varchar(12);
8 begin
9 select nvl(max(to_number(to_char(substr(eno,0,6)))),0)into olddate from T_t
ext2
10 ;
11 select to_number(to_char(sysdate,'YYYYMM'))into newdate from dual;
12 select nvl(max(to_number(eno)),0)into oldeno from T_text2;
13 if newdate>olddate then
14 select nvl(to_char(sysdate,'YYYYMM'),to_char(sysdate,'YYYYMM'))||lpad(to_n
umber(nvl('',0))+1,6,'0')
15 into:new.eno from dual;
16 else
17 select to_number(oldeno)+1 into:new.eno from dual;
18 end if;
19 end;
20 /

触发器已创建

3。添加部分测试数据:

SQL> insert into T_text2(ename) values('AA');

已创建 1 行。

SQL> insert into T_text2(ename) values('BB');

已创建 1 行。

SQL> insert into T_text2(ename) values('CC');

已创建 1 行。
4。查询数据:

SQL> select * from T_text2;

ENO ENAME
------------ --------------------
200709000001 AA
200709000002 BB
200709000003 CC
====================================================================

在oracle 9i里主键的自动增长(补充)
关键字: 在oracle 9i里主键的自动增长(补充)
create table ADDRESSBOOK(
ID CHAR(10) not null,
NAME VARCHAR2(25) not null,
PHONE VARCHAR2(10) not null,
ADDRESS VARCHAR2(50) not null,
constraint "SYS_C003049" primary key ("ID")
);
1创建序列
SQL> create sequence seq_Addressbook_
2 increment by 1
3 start with 1
4 minvalue 1
5 nocache;

2,创建触发器

SQL> create or replace trigger users_text
before insert on ADDRESSBOOK
for each row
begin
select to_char(seq_Addressbook_id.nextval) into:new.id from dual;
end users_text;
/

3, 测试

SQL> insert into addressbook (name,phone,address)
2 values('gj','11','bj');

已创建 1 行。

SQL> select * from addressbook;

ID NAME PHONE
---------- ------------------------- ----------
ADDRESS
--------------------------------------------------
u100 33 11
22

2 gj 11
bj
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liyihz2008
2008-11-18 · TA获得超过270个赞
知道答主
回答量:145
采纳率:0%
帮助的人:97.5万
展开全部
oracle没有自动增长列,一般是用序列配合使用,可以给某个表创建一个序列,插入要自动增长列的值时可以取序列的下一个值就行了,建议看一下序列

以你的表为例
你表sectable创建一个序列,暂取名叫sequence_sectable
create sequence sequence_sectable start with 1 increment by 1 order
取序列的下一个值
select sequence_sectable.nextval value from dual

这样你就可以insert到你的表里了,要手动进行插入,不知道能不能帮到你!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友efae51f
2008-11-18 · TA获得超过2221个赞
知道大有可为答主
回答量:6916
采纳率:0%
帮助的人:3004万
展开全部
建议您查找一下“oracle序列”
先建序列
再用序列建表
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yanghao717
2008-11-18 · TA获得超过278个赞
知道答主
回答量:289
采纳率:0%
帮助的人:248万
展开全部
CREATE TABLE a (INT id IDENTITY(1,1))就可以了,它们分别是初值和自增值!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式