扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
oracle的自增需要依靠序列和触发器共同实现
创新互联公司是专业的义马网站建设公司,义马接单;提供成都网站设计、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行义马网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
比如
先创建一个表
create table test(id int primary key,
name varchar2(10));
创建一个序列
create sequence test_seq
increment by 1
start with 1
minvalue 1
maxvalue 9999999999999
nocache
order;
触发器实现
create or replace trigger test_trigger
before insert on testfor each row
begin
select test_seq.Nextval into:new.id from dual;
end;
然后你试试吧
insert into test (name) values ('张三');
这里Oracle数据库使用命令行操作,注意Oracle不能直接设置自增字段,需要使用序列+触发器来实现。
1.创建Book表
Create table Book(
Id NUMBER(6) constraint s_PK primary key,
Title nvarchar2(200) not null,
Author nvarchar2(200) not null,
Publisher nvarchar2(200) not null,
ISBN nvarchar2(50) not null,
Price NUMBER(6,2) not null,
CategoryName nvarchar2(50) not null,
Description nvarchar2(1000) not null,
ImageName varchar2(50)
);
2.创建自增序列
create sequence BOOK_seq (BOOK_seq为序列名,任意取)
increment by 1 (increment 表示字段逐条增加1)
start with 1 (设置自增序列的初始值为1)
nomaxvalue (不限制自增序列的最大值)
minvalue 1; (设置自增序列的最小值为1)
3.试用一下,向BOOK表中插入一条数据,Id列就引用了自增序列。
insert into BOOK values(BOOK_seq.nextval,'a','a','a','a',32.1,'a',
'a','1.jpg');
注意:
操作之后记得输入“commit;“保存操作。
Oracle数据库的的命令行创建表,系统会自动转化为大写字母,假如使用数据库操作客户端,那么建表等操作时记得字段名大写。
一、主键id自增
oracle 中不能设置自动增加,这个和其他数据库不一样,但是有 序列,这个是Oracle自己特有的东西,
1、首先创建序列:create sequence seq;
语法:
CREATE SEQUENCE 序列名
[INCREMENT BY n] --每次加几
[START WITH n] --序列从几开始
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --小值、大值限制
比CREATE SEQUENCE seq start with 1 increment by 1; --建立了额从1开始每次加1序列
访问序列时用 序列名称.nextval语法
这就创建好了,然后 seq.nextval 就会返回一个值,不会重复的值,
insert into tablename values(seq.nextval,'test');
insert into tablename values(seq.nextval,'test');
insert into tablename values(seq.nextval,'test');
这样前3个id 分别是 1,2,3
二、自动生成UUID策略
import java.util.UUID;
Student s = new Student();
s.setId(UUID.randomUUID().toString());
用触发器trigger的功能来实现它: 1、首先建立一个创建自增字段的存储过程create or replace procedure pro_create_seq_col
(tablename varchar2,columnname varchar2)
as
strsql varchar2(1000);
begin
strsql := 'create sequence seq_'||tablename||' minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache';
execute immediate strsql;
strsql := 'create or replace trigger trg_'||tablename||' before insert on '||tablename||' for each row begin select seq_'||tablename||'.nextval into :new.'||columnname||' from dual; end;';
execute immediate strsql;
end;
/
2、Oracle中执行动态SQL时要显示授权(即使该用户拥有该相关权限)GRANT CREATE ANY SEQUENCE TO UserName;
GRANT CREATE ANY TRIGGER TO UserName;
3、重新Compile存储过程pro_create_seq_col; 4、搞定,下面我们就可以用这个存储过程建立自增自段了。 5、调用存储过程建立自增字段(提示: 第一个参数是表名,第二个参数为自增字段的名字)exec pro_create_seq_col('sb_zsxx','zsxh');
exec pro_create_seq_col('sb_sbxx','sbxh');
exec pro_create_seq_col('sb_jkx','pzxh');
exec pro_create_seq_col('sdspfp','sysfpid');
1、打开sql server数据库,新建一张表,然后在表建id字段,选择int类型。
2、选中id字段,在下面的列属性中找到标识规范。
3、点击标识规范,可以看到默认为否,代表不递增。
4、将标识规范调为是,增量设置为1,点击保存按钮,需要注意的是这种方法只在创建表的时候有用,如果已经创建表成功了,再来修改会出现错误,可以先删除,再重新创建添加id字段自增。
5、点击保存之后,添加数据的时候,id会自动递增了。
oracle:
oracle没有自增长序列,因此可以用以下方法来实现
1.建立表格:
createtabletable1
(
cidnumber(8)notnull,
othersvarchar2(20)
);
2.建立从1开始的序列:
createsequenceemp_sequence
incrementby1--每次加几个
startwith1--从1开始计数
nomaxvalue--不设置最大值
nocycle--一直累加,不循环
nocache--不建缓冲区3.建立触发器:
createorreplacetriggermytgr
beforeinsertontable1foreachrow
begin
selectmytgr.nextvalinto:new.cidfromdual;
end;
mysql:
createtabletbname(a_idunsignedintprimarykeyauto_incrementnotnull,
a_titlevarchar(32),
a_contenttext);
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流