2013-05-07 3 views
0

Я студентAUTO_INCREMENT в оракула

я делать присваивания, сделать auto increment

Как создать в Oracle в auto increment?

CREATE TABLE mua_thi 
( 
mamuathi varchar2(10) not null, 
check(mamuathi like 'MT%') 
) 
mamuathi = MT + auto_increment; 


create or replace trigger tangmuathi 
before insert or update 
on mua_thi 

begin 
set new.mamuathi := MT + muathitang.nextval from Dual; 
end; 

create sequence muathitang start 
with 1 increment by 1; 

ответ

2
mamuathi = MT + auto_increment; 

Не структурировать таблицу, как это. Это умный ключ (одна строка с несколькими конкатенированными компонентами). Смарт-ключи тупые. Если «MT» имеет решающее значение (почему ключ с жестко закодированным, неизменным элементом?) Делает его отдельным столбцом.

CREATE TABLE mua_thi (mamuathi varchar2(2) not null 
         , id number (8) not null 
         , primary key (mamuathi, id) 
         , check(mamuathi = 'MT') 
); 

На самом деле до сих пор существует некоторая плохая практика. Во-первых, имя ограничения - это делает жизнь проще:

, constraint mt_pk primary key (mamuathi, id) 
, constraint mt_ck check(mamuathi = 'MT') 

Два, если mamuathi является действительно постоянной бессмысленно использовать его в ключе:

, constraint mt_pk primary key (id) 

Три, mamuathi может развиваться несколько значений, поэтому подумайте, может ли внешний ключ в справочной таблице быть лучше.

Очевидно, что недостатком разделения интеллектуального ключа является необходимость повторения нескольких столбцов. В 11g мы можем использовать функцию виртуального столбца, чтобы избежать этого неудобства:

CREATE TABLE mua_thi (mamuathi varchar2(2) not null 
         , id number (8) not null 
         , mamuathi_disp AS mamuathi||lpad(id,8,'0') 
         , primary key (mamuathi, id) 
         , check(mamuathi = 'MT') 
); 
Смежные вопросы