oracle不等同于Mysql,直接使用navicat勾选自动递增,需要增加序列,然后生成触发器
1.创建序列
create sequence ROUCE_AUTO --创建的序列名ROUCE_AUTO是序列名
increment by 1 --自增1
start with 1 --从1开始
nomaxvalue --不限制最大值
nocache; --不使用缓存
2.使用
create or replace trigger insert_ums_role_menu_autoinc --创建触发器,insert_ums_role_menu_autoinc是自定义的名字
before insert
on ums_role_menu_relation -- 在哪个表使用ums_role_menu_relation 是表名
for each row
declare
nextid number;
begin
IF :new.ID IS NULL or :new.ID=0 THEN --此处的id是主键,序列使用到这个字段上
select ROUCE_AUTO.nextval --ROUCE_AUTO是刚才创建的序列
into nextid
from sys.dual;
:new.ID:=nextid; --把序列的自增值,赋值给ID
end if;
end insert_ums_role_menu_autoinc ;
自增到此结束
查询序列下一个生成的序号是什么:
select ROUCE_AUTO.nextval from sys.dual;
oracle的不同于mysql的地方
oracle表和字段是有大小写的区别。oracle默认是大写,如果我们用双引号括起来的就区分大小写,如果没有,系统会自动转成大写:
也就是说创建表的时候,如果建表语句中的字段用"" 双引号括起来的,那么navicat给创建表的时候,就会识别出小写,这样使用mybatis连接数据库使用时,就会报错,提示表不存在
例:select id,name from user; 这样写就会报错:
正确的写法是:select ‘id’,‘name’ from “user”; 但是这样写sql比较费劲,所以建表的时候,就应该用大写:这样不加双引号,也能够查出来数据
建表的时候字段名不加双引号,也能正常使用mybatis查询