社区
Oracle
帖子详情
怎么保证并发操作时,唯一字段不会被重复?
dawangcat
2019-09-11 10:17:30
做一个资产管理系统,前端每次新增一件资产就会自动生成一个新的资产编号(数据库中要求资产编号唯一),批量新增后再保存到数据库,为了保证并发操作时资产编号不会重复占用,现在的做法是:前端新增记录时,先在表中插入新生成的资产编号,状态设为0,提交的时候更新记录,状态改为1,但是会出现一个问题:如果因为异常导致页面关闭,这条记录会一直存在数据库中,请问有什么好的方法解决?比如事务,锁什么的,我自己查了资料,还是没有思路,想请教下各位,感谢。
...全文
280
3
打赏
收藏
怎么保证并发操作时,唯一字段不会被重复?
做一个资产管理系统,前端每次新增一件资产就会自动生成一个新的资产编号(数据库中要求资产编号唯一),批量新增后再保存到数据库,为了保证并发操作时资产编号不会重复占用,现在的做法是:前端新增记录时,先在表中插入新生成的资产编号,状态设为0,提交的时候更新记录,状态改为1,但是会出现一个问题:如果因为异常导致页面关闭,这条记录会一直存在数据库中,请问有什么好的方法解决?比如事务,锁什么的,我自己查了资料,还是没有思路,想请教下各位,感谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dawangcat
2019-09-11
打赏
举报
回复
引用 1 楼 卖水果的net 的回复:
使用序列,能解决你的这个问题。
但是,可能会造成“断号”的情况,能接受不?
大致明白了,谢谢,我先试下。
卖水果的net
2019-09-11
打赏
举报
回复
使用序列,能解决你的这个问题。 但是,可能会造成“断号”的情况,能接受不?
weixin_40290083
2019-09-11
打赏
举报
回复
oracle使用序列,它没有属性自增的设置,mysql有,无论使用自增还是序列,如果有删除,就会存在断号,自己定义容易造成冲突
区块链实战高
并发
项目
为什么区块链必须是高
并发
的? 1. 摩尔定律早已结束目前,提高
并发
性是解决人类计算能力的主要方向了。但是
并发
的编程模型一直受到来自上下两方的压力。2000年开始之际,人们已经意识到摩尔定律失效了。你不太可能期待着今年写的C代码在明年的
时
候能够被更快的处理器运行了。因为处理器性能的提升主要是通过堆积更多的core来完成。所以为了编写更快的代码,你要做的是编写
并发
式的程序,同
时
使用更多的核、更多的CPU、更多的机器。对于
并发
式的编程模型这就是来自于下方的压力。当今的主流商业应用软件都是跑在web端的,7乘24小
时
百万级以上的
并发
访问。人们已经无法想象一个运行在桌面的单机程序实现同样的商业价值。对于编程模型来说,这是来自于上方的压力。所以当我们谈论区块链
时
,我们需要明白支持
并发
性才能满足市场的需求。2. 线程模型并不理想线程模型是上世纪90年代提出的
并发
模型,线程模型广泛应用在Java虚拟机、CLR、.net虚拟机中,甚至应用于Erlang这样更高级的系统。线程模型失败的地方在于如果你在读一段Java或C sharp代码,你无法明白有多少个线程在里面。我们可以讨论并行性和
并发
性,也可以讨论
并发
式和分步式,前提是我们必须搞清这几个概念。并行性指同步进行的多项活动之间并不共享信息。就像一条八车道的公路,根本没有换道,那就是并行。当你开始允许换道
时
,不同的活动和线程之间出现交互,那就是
并发
。分布式就是把每一笔交易想像成一辆车,换道就是切换到不同的处理器上。分布式必然需要面对故障模式,如果允许单独某个任务失败,就带来了本地(local)的概念。线程有不同的概念,包括有
操作
系统线程和cpu内核的物理线程等等。我谈论的是虚拟机上提供
并发
性的编程模型。线程模型的问题是本质上在编程语言的语义层面并没有提供
并发
性的支持。我用语言集成查询作为一个例子,证明语言集成将最终胜出。语言集成查询开始于微软的函数式编程大牛Eric Meyer。数据存储的两个方法是:1,提供一个支持数据存储的库;2,提供一个查询的语言特性。在第一种情况下,并没有类型系统(type system)帮助你对查询进行语义检查。在后一种情况下,类型系统和编译器参与检查确保查询处于良好状态并且
不会
中断。在过去的十五年中,语言集成查询已经是最热门的话题之一。所以
时
间将会证明,语言整合的方法会稳步胜出。回到
并发
的话题,采用库的方法就是线程模式的思路。在语义层面的扩展就是Rholang、 Pict 或者Vim等移动进程演算(mobile process calculi )的思路。type system
保证
了你在读一段Rholang程序
时
,能够看到有多少个进程在进行。同样的,如果你采用 pi calculus 或者 ambient calculus也可以具有同样的优势。3. DAO事件其实是一个
并发
问题
并发
性成为一种语法现象。因为它是语法,是可以对代码进行分析并检查各种
并发
属性的语法。一个非常好的示例是竞争条件(race condition):两个事件是否有可能以任意顺序发生?DAO事件其实是一个
并发
问题,是竞争条件。如果有对应的语言表示,就可以通过语法分析(也称为静态分析),捕获这些错误。即使是熟悉
并发
问题的老程序员,仍然会不
时
地搞错,例如用餐哲学家(dining philosophers)或其他类型的问题,所在为
并发
编写算法是非常困难的。当我在八十年代末和九十年代初期在Rosette工作
时
,我注意到即使使用非常强大的编程语言,
并发
编程也是非常困难的事情。不幸的是编程理论停止了二三十年,市场好像卡住了。我惊诧于Javascript一直统治着浏览器平台。我计划开发一个基于Rholang的浏览器语言,使用Rholang从头编写浏览器。4.现在的区块链都错了大多数交易是孤立不相关的。大多数人的财务状况都是彼此分开的。当你去喝咖啡
时
,地球另一面的人在买菜,你们的交易不相关,在区块链世界中,这一点非常重要。如果我们必须对这些交易进行系列化,我们就走进了死胡同。所有的交易都必须经过一个虚拟机。如果那个虚拟机是顺序的(sequential),Transaction将不得不按线性排列,这正是以太坊虚拟机的模式。在这种情况下,无论是DAG还是区块,那都无所谓了。在区块链上使用序列化模型
时
,不可能有语言层面的
并发
的显式表示。因此无法使用静态分析来获得
并发
行为,
并发
都隐藏在幕后。这就像一个干净和纯粹的函数式语言和Java之间的区别。使用与lambda演算接近的函数式语言,你所看到的就是你所获得的。所有执行实际上都在代码中。而对于Java来说,程序中存在着一堆隐藏的状态:堆栈、线程数以及类似的东西都在代码中。
mysql数据库在高
并发
场景下
重复
插入如何
保证
唯一
性解决方案
mysql数据库在高
并发
场景下
重复
插入如何
保证
唯一
性解决方案高
并发
场景简单粗暴前后端都做防
重复
操作
mysql表加
唯一
索引使用redis缓存 高
并发
场景 在高
并发
场景中,经常会遇到
并发
重复
数据插入,没有
唯一
索引(比如有逻辑删除)却要
保证
唯一
性的问题。比如分布式告警计算中,多个计算实例同
时
计算出同一个告警并同
时
插入相同的告警记录到数据库中,这
时
应该只插入一条记录。本文分析了在MySQL的InnoDB引擎中解决这类的问题的4种思路和相关方案。 简单粗暴 直接每条select, 判断,然后insert,毫无疑问,这
MySQL根据某一个或者多个
字段
查找
重复
数据,并且保留某
字段
值最大的记录
问题场景当系统没有处理好
并发
操作
的情况下,
操作
人员同
时
操作
一张表的情况下,数据库有可能被插入相同记录,这些会带来隐藏的bug。解决思路一解决
并发
操作
的冲突。解决思路二对数据库(MySQL)某张表去重,首先确定你的业务是否允许
重复
,不允许你
重复
的话可以建立
唯一
索引和联合
唯一
索引来
保证
记录不
重复
,但如果出现了
重复
记录,怎么办?请看下文。情况一:对一个
字段
查找
重复
记录表数据: a. 首先根据sample
幂等性与
并发
(表单
重复
提交和
并发
增删改及校验
唯一
操作
场景)
幂等性与
并发
---表单
重复
提交和
并发
增删改及校验
唯一
操作
场景
并发
更新
操作
并发
插入
操作
(单用户
重复
提交)
并发
校验
唯一
操作
并发
更新
操作
先说乐观锁version 表t1
字段
v值为1, 先select当前版本号1 同
时
更新...
Mysql 表
字段
修改
并发
情况下避免
重复
Mysql 表
字段
修改
并发
情况下避免
重复
一,场景二,问题三,解决方案 一,场景 多个用户同
时
修改用户名
时
,存在用户名相同的情况,而由于业务需要,用户名是不允许相同的,需要避免
重复
。 二,问题 sql语句举例(伪代码): If(name not exited) (1) { ...
Oracle
17,082
社区成员
55,236
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章