首先,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删除是不释放空间的
之后再执行语句就能执行成功了,如下: