背景
最近在业务上遇到了一个现象,系统环境使用oracle数据库,业务场景是我所负责的零件相关系统接收外部系统返回的零件数据时,数据库中存在了相同零件号的情况。这种情况,在业务上是不允许的。现有系统的解决方案为:1. 数据库层面为零件号设置了唯一索引。2. 代码逻辑层面, 在解析报文创建零件的时候,会先查找数据库中是否存在改零件。如果已经存在便直接返回,如果不存在则需要创建。
经过上述两步的设置,从直观上认为数据库中应不会存在相同的零件号,但与之相反,数据库中偶然会出现一两次相同零件号的情况。因此,写这篇文章来分析定位一下原因,并给出解决方案。
环境模拟
这里使用docker安装oracle数据库进行请求模拟。
首先,下载oracle的数据库镜像,这里使用mac版本的,该镜像最多存储1GB的数据,最多使用1GB的内存。
docker pull oracleinanutshell/oracle-xe-11g
启动oracle
docker run -d -p 1521:1521 --name oracle11g oracleinanutshell/oracle-xe-11g
进入docker容器
docker exec -it 039fd9d543bc /bin/bash
输入命令 sqlplus system/oracle,出现
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production字样,表示数据库启动成功。
创建用户名及密码
SQL> create user Jack identified by mimi;
User created.
SQL> select * from all_users;
用户授权
SQL> grant connect,resource to JACK;
创建一个用户表
create table user_test (
user_id number(10) primary key ,
user_name varchar2(100),
pass_word varchar2(200)
);
设置用户名称为唯一键
create unique index user_name_un on user_test(user_name);
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~