2013-05-15 3 views
2

следующие операторы SQL для Apache Derby работает отлично:Apache Derby: определение идентификатора для столбца "генерироваться по умолчанию AS IDENTITY"

connect 'jdbc:derby://uri'; 

create schema TEST02; 
set schema TEST02 ; 

create table T 
    (
    id INT not null primary key GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    name varchar(50) not null unique 
    ); 


insert into T(name) values ('NAME02'); 
insert into T(name) values ('NAME03'); 
select * from T; 
drop table T ; 
drop schema TEST02 RESTRICT; 


disconnect; 

выход:

ij> insert into T(name) values ('NAME02'); 
1 row inserted/updated/deleted 
ij> insert into T(name) values ('NAME03'); 
1 row inserted/updated/deleted 
ij> select * from T; 
ID   |NAME            
-------------------------------------------------------------- 
1   |NAME02            
2   |NAME03  

, но когда я знаю, 'идентификатор некоторых записей, и я установить идентификатор в моем INSERT заявление:

## here I set the id column 

ij> insert into T(id,name) values (1,'NAME01'); 
1 row inserted/updated/deleted 

ij> insert into T(name) values ('NAME02'); 
ERROR 23505: The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by 'SQL130515100041380' defined on 'T'. 
ij> insert into T(name) values ('NAME03'); 
1 row inserted/updated/deleted 
ij> select * from T; 
ID   |NAME            
-------------------------------------------------------------- 
1   |NAME01            
2   |NAME03            

2 rows selected 

, как я могу это исправить, как я могу иметь такое а uto_increment, где я могу, иногда, установить первичный ключ?

ответ