oracle中的Auto_increment

时间:2013-05-07 09:59:41

标签: oracle 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;

1 个答案:

答案 0 :(得分: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')
  );