赞
踩
Oracle数据库默认不支持像 SQLServer、MySQL中的自增长(auto increment)功能,即自动为每一行记录的自增长字段生成下一个值。
序列是Oracle数据库中用来生成唯一数值的对象,可以类比于MySQL中的自增长。使用序列递增生成的数字当作主键时,防止并发访问时产生重复的主键值。
触发器可以在INSERT、UPDATE和DELETE操作执行之前或之后自动运行PL/SQL代码。对于使用序列生成自增长主键的情况,可以通过在插入语句之前定义一个触发器,在INSERT语句执行时触发自动生成下一个序列值。
这种方式适用于直接使用JDBC连接数据库。这种方式将主键自增长的任务完全交给数据库,我们无需在代码层面上进行任何控制。
这种方式适用于通过Hibernate连接数据库的方式。这种方式在数据库上创建序列,通过配置在POJO类上的注释,让Hibernate去调用数据库的序列实现自增长。
这两种方式都是通过Oracle的序列实现自增长,但第一种通过数据库的触发器在插入的时候自动插入主键。而后者则由Hibernate自动完成获取主键,插入主键这一操作。
序列和触发器的位置在【其他】选项里面。
示例字段只需要一个id,一个name即可
常规选项卡中:触发器类型选【TABLE】,表模式选【ROOT】,表明选择【T_STU】
高级选项卡中选填:引用旧【OLD】,引用新的【NEW】
定义选项卡中:需要将序列Seq001的序号查出来并放入T_STU表的id中。
- BEGIN
- select "Seq001".nextval into :NEW."id" from dual;
- END;
其中"Untitled"是未保存的默认触发器名。
- -- 创建表
- CREATE TABLE "T_STU" (
- "id" NUMBER NOT NULL PRIMARY KEY,
- "name" VARCHAR2(255)
- );
-
- -- 创建序列
- CREATE SEQUENCE "Seq01" MINVALUE 1 INCREMENT BY 1 NoMaxValue START WITH 1;
-
- -- 创建触发器
- create TRIGGER "Trigger01" BEFORE INSERT ON "T_STU"
- FOR EACH ROW
- BEGIN
- SELECT "Seq01".nextval INTO :NEW."id" FROM dual;
- END;
-
- -- 插入数据
- INSERT INTO "T_STU" ("name") VALUES ('小红');
-
-
- -- 查看结果
- SELECT * FROM "T_STU";
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。