我是学生
我做了分配,做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;
答案 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')
);