oracle创建表,序列,触发器,自动生成唯一主键

Oracle 专栏收录该内容
5 篇文章 0 订阅

数据库oracle和mysql插入数据的区别?

mysql数据库主键字段是increament,则插入数据不需要插入主键字段。数据库会自动生成主键

oracle数据库主键字段必须创建序列,则插入数据必须插入主键字段。数据库根据序列自动生成主键

那么如何让oracle数据库插入数据像mysql一样实现主键自增呢?解决方法是:序列+触发器


案例:

plsql图示:

1.创建表:



2.创建序列:



3.创建触发器:



sql实现:

1.创建表


  
  1. – Create table
  2. create table SJK_BAR_CODE
  3. (
  4. id NUMBER( 12) not null,
  5. rule VARCHAR2( 255),
  6. esp_no VARCHAR2( 100),
  7. table_name VARCHAR2( 10),
  8. esp_id NUMBER( 12),
  9. is_del NUMBER( 1),
  10. create_time DATE,
  11. update_time DATE,
  12. esp_content VARCHAR2( 100)
  13. )
  14. tablespace USERS
  15. pctfree 10
  16. initrans 1
  17. maxtrans 255
  18. storage
  19. (
  20. initial 64K
  21. minextents 1
  22. maxextents unlimited
  23. );
  24. – Add comments to the columns
  25. comment on column SJK_BAR_CODE.is_del
  26. is ‘1:否,2:是’;
  27. comment on column SJK_BAR_CODE.esp_content
  28. is ‘档案内容’;
  29. – Create/Recreate primary, unique and foreign key constraints
  30. alter table SJK_BAR_CODE
  31. add constraint PK_BAR_CODE primary key ( ID)
  32. using index
  33. tablespace USERS
  34. pctfree 10
  35. initrans 2
  36. maxtrans 255
  37. storage
  38. (
  39. initial 64K
  40. minextents 1
  41. maxextents unlimited
  42. );


2.创建序列


  
  1. -- Create sequence
  2. create sequence BAR_CODE_SEQUENCE
  3. minvalue 1
  4. maxvalue 999999999999999999999999999
  5. start with 1
  6. increment by 1
  7. cache 20;


备注:

minvalue 1          —–最小值
maxvalue 9999999999999999999999999999 ——最大值
increment by 1     —–每次加几个
start with 1           —–从几开始
cache 20             —–缓存值多少
noorder               —–一直累加,不排序
nocycle ;              –一直累加不循环


3.创建触发器


  
  1. CREATE OR REPLACE TRIGGER BAR_CODE_TG
  2. before insert on SJK_BAR_CODE for each row
  3. begin
  4. select BAR_CODE_SEQUENCE.nextval into :new.ID from dual;
  5. end;


4.插入记录

INSERT INTO SJK_BAR_CODE(rule,esp_no)VALUES ('00-100-2016-0013','100')
  


5.查询记录

select * from SJK_BAR_CODE
  

查询结果集:



到此这里发现插入数据主键自动递增,实现像mysql一样的小若。


总结:

1.在实际开发中,具体情况具体分析,也不一定都要创建触发器。

2.若是没有创建触发器,只创建了序列,则插入数据必须插入主键id,主键id值为序列如:


  
  1. <insert id="addSonDeptOp" parameterType="com.suwei.sysMng.bean.PtDept">
  2. insert into
  3. PT_DEPT(DEPT_ID,DEPT_NAME,DEPT_LNAME,DEPT_CODE,DEPT_ADDR,DEPT_PHONE,DEPT_TYPE,DEPT_LEVEL,DEPT_MANAGER,USE_FLAG,FDEPT_ID)
  4. values(PT_SEQ.nextval,#{deptName},#{deptLname},#{deptCode},#{deptAddr},#{deptPhone},#{deptType},#{deptLevel},#{deptManager},#{useFlag},#{fdeptId})
  5. </insert>
3.oracle查询所有序列

select * from all_sequences
  

结果图:


4.oracle查询当前用户所有序列(常用)

select * from user_sequences
  
结果图:


5.oracle查询所有触发器

select object_name from dba_objects where object_type='TRIGGER'
  
结果图:


6.oracle普通用户的权限查询所有触发器

select  name  from  user_source  where  type=’TRIGGER’  group  by name


查询显示所有列:select * from user_source where type=’TRIGGER’

7.oracle查询当用用户的所有触发器

如当前oracle用户名”SJKNEW”

则:

select object_name from dba_objects where object_type='TRIGGER' and  owner='SJKNEW'
  
8.oracle查询某个触发器具体详细信息

如触发器名称”BAR_CODE_TG”

select text from user_source where type='TRIGGER' and name='BAR_CODE_TG'; 
  
9.oracle注意查询字段区分大小写,如上诉默认的触发器名称均是大写,若是换成小写则查询为空

本文转自:https://blog.csdn.net/u014079773/article/details/53425114

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值