? ? oracle和mysql不同。没有自增长字段auto_increment,可以通过序列和行触发器实现
? ? 1、建立数据库测试表
? ? ?
CREATE TABLE TEST( ID NUMBER(12) PRIMARY KEY, NAME VARCHAR2(20) );
?
? ?2、创建自增长序列
? ?
CREATE SEQUENCE test_seq INCREMENT BY 1 START WITH 1 --从1开始 NOMAXVALUE --不设最大值 NOCYCLE --不循环 NOCACHE;
??
? ?3、创建触发器
? ??
CREATE TRIGGER increase_test BEFORE INSERT -- ON TEST FOR EACH ROW BEGIN SELECT test_seq.Nextval INTO:NEW.ID FROM DUAL; END;
? ??定义受到影响的各行触发器.这些触发器称为行触发器
? ? 行触发器的定义方式与语句触发器类似,但是有以下两个例外
? ? 1、行触发器要在定义的触发语句中包含for each row子句,还可以包含referencing语句
? ? 2、在before...for each row触发器中,可以引用受到影响的行值
?
? ? ?在行触发器中,用户能够访问受到影响的行值。通过引用具有相关名称的列,即可以获取语句执行前的值和语句执行后的值。前映象(before image)的默认名称是:old,后映象(after image)的默认名称是:new
?
? ? ?在insert触发器中,只可以使用:new值。由于以前没有存在这些行,所以不能够有:old.与此相反,在delete触发器中,则没有:new,只有:old, update