主键自动增长
主键自动增长,通过客户端工具根据向导我相信大部分人都会,但是,在真正开发当中却一般都要通过SQL来实现。怎么办呢?网上有很多资料,在此,我就言简意赅总结一下吧:
1、对于My SQL,实现起来很简单,只要把主键设为auto_increment即可,如下:
create table student(stu_id int auto_increment primary key not null, name char(20));
2、MS SQLService的话跟My SQL差不多,设为identity即可,如下:
create table student(stu_id int identity(1,1) primary key not null, name char(20));
identity中有两个参数,分别表示“起始值”和“增量”
3、Oracle的话就稍微有些复杂啦,不过也有两种方法:
①创建序列以及触发器来实现,如下:
序列
create sequence simon_sequence
minvalue 1 //最小值
maxvalue 999999999999999999999999999 //最大值
start with 1 //起始值(其实有了最小值,不用它也行)
increment by 1 //增量
cache 20; //缓存
创建之后可以通过nextval与curval两个属性进行访问,它们的区别在于:
nextval:先增加序列的值,然后再返回序列的值
curval:直接返回序列当前的值
其实,创建这个序列像MS SQLServer那样,只用起始值和增量这两个值就可以啦
触发器
create trigger "simon_trigger" before
insert on student for each row when(new.stu_id is null)
begin
select simon_sequence.nextval into:new.stu_id from dual;
end;
注:以上序列,触发器等在PL/SQL工具中建立很容易,但如果是在命令行中创建,则语句最后要是"/",即执行的意思,而不是";",
如创建触发器,命令为:
create trigger "simon_trigger" before
insert on student for each row when(new.stu_id is null)
begin
select simon_sequence.nextval into:new.stu_id from dual;
end;
/
②只要创建序列就行,然后直接在插入数据的时候访问序列,如下
insert into student(stu_id,name) values(simon_sequence.nextval, '张三');
浙公网安备 33010602011771号