oracle数据库主键自增

首先,mysql ,sql server 可以直接实现自增。但是oracle不允许在建表时直接指定某个字段自增,需要通过建立序列;

所以指定某个字段自增的方法有两种:1.创建表; 2.创建序列; 3.建立触发器

方法一【1.创建表 2.创建序列 】:

                第一步--〉创建表:create table sysadmin
                                             ( LoginID number not null primary key,
                                               LoginPWD nvarchar2(20),
                                               LoginName nvarchar2(20)
                                              ) ;
                第二步--〉创建序列:create sequence sysadminID_seq 
                                                        minvalue 1           //最小值限制为1
                                                        maxvalue 9999   //最大值限制
                                                        increment by 1      //每次自增1
                                                        start with 1;           //从1开始计数
                此时,再向数据库插入数据时就可以实现主键自增,语句如下:
                                insert into sysadmin 
                                (
                                   LoginID,
                                   LoginPWD,
                                   LoginName
                                )   
                                values
                                (
                                   sysadminID_seq.NEXTVAL ,
                                   '123456' ,
                                   'LX'
                                );
               然而,这种方式不适合另外一种insert方式,如下:
                          insert  into  table(key1,key2)  select  k1,k2  from  another_table;

方法二【1.创建表  2.创建序列  3.建立触发器】:

        第一步--〉创建表:create table sysadmin
                                                     ( LoginID number not null primary key,
                                                       LoginPWD nvarchar2(20),
                                                       LoginName nvarchar2(20)
                                                      ) ;
        第二步--〉创建序列:create sequence sysadminID_seq 
                                                        minvalue 1           //最小值限制为1
                                                        maxvalue 9999   //最大值限制
                                                        increment by 1      //每次自增1
                                                        start with 1;           //从1开始计数
        第三步--〉创建立触发器:create or replace trigger sysadminID_tri
                                   before insert on sysadmin
                                   for each row
                                   begin 
                                   select sysadminID_seq.Nextval into :new.LoginID from dual;
                                   end ;
       至此完成字段自增,测试如下:
                        insert into sysadmin(LoginPWD,LoginName) values('123456','lijie');  
                        select * from sysadmin;

成功。

给表追加主键:

alter table SCORE_INF 
add constraint PK_testId primary key(testId);

如果提示:

则需要删除掉原来已有的testId数据,删除表数据有3种方法:

1. drop table SCORE_INF;      //用drop删除表数据,不但会删除表中的数据,连结构也被删除了
2. truncate table SCORE_INF;  //1、用truncate删除表数据,只是删除表中的数据,表结构不会被删除!
                                2、删除整个表的数据时,过程是系统一次性删除数据,效率比较高
                                3、truncate删除释放空间
3. delete table SCORE_INF;   //1、用delete删除表数据,只是删除表中的数据,表结构不会被删除!
                               2、虽然也是删除整个表的数据,但是过程是系统一行一行的删,效率比truncate低
                               3、delete删除是不释放空间的

之后再执行语句就能执行成功了,如下:

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值