oracle 中键表 怎么创建id自动增长
自学oracle真的老火啊,请大家帮个帮说下如createtablesectable(secidintegerprimarykey,secnamenvarchar2(20...
自学oracle 真的老火啊,
请大家帮个帮说下
如
create table sectable
(
secid integer primary key,
secname nvarchar2(20) not null
)
我要怎么创建 id为 自动增长列
网上直接复制过来的代码就别来了,我都看过了还是不懂.
请把每个关键字说清楚,最好小写,
谢谢. 展开
请大家帮个帮说下
如
create table sectable
(
secid integer primary key,
secname nvarchar2(20) not null
)
我要怎么创建 id为 自动增长列
网上直接复制过来的代码就别来了,我都看过了还是不懂.
请把每个关键字说清楚,最好小写,
谢谢. 展开
5个回答
展开全部
创建一个序列就可以了!
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值不会冲突!!!
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值不会冲突!!!
展开全部
在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
关键字: 在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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
oracle没有自动增长列,一般是用序列配合使用,可以给某个表创建一个序列,插入要自动增长列的值时可以取序列的下一个值就行了,建议看一下序列
以你的表为例
你表sectable创建一个序列,暂取名叫sequence_sectable
create sequence sequence_sectable start with 1 increment by 1 order
取序列的下一个值
select sequence_sectable.nextval value from dual
这样你就可以insert到你的表里了,要手动进行插入,不知道能不能帮到你!
以你的表为例
你表sectable创建一个序列,暂取名叫sequence_sectable
create sequence sequence_sectable start with 1 increment by 1 order
取序列的下一个值
select sequence_sectable.nextval value from dual
这样你就可以insert到你的表里了,要手动进行插入,不知道能不能帮到你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议您查找一下“oracle序列”
先建序列
再用序列建表
先建序列
再用序列建表
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CREATE TABLE a (INT id IDENTITY(1,1))就可以了,它们分别是初值和自增值!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询