当前位置: 首页 > news >正文

建设网站怎样做工程项目信息网

建设网站怎样做,工程项目信息网,wordpress如何关闭主题,企业系统管理软件有哪些数据字段保证唯一性 我们日常开发中#xff0c;常见这么一个需求#xff0c;要求一个code#xff0c;一个name#xff0c;需要保证code不重复#xff0c;而code是用户输入的#xff0c;常见的就比如一些字典等。 这个的我们常见的几种做法的话。 唯一键 要么就是直接…数据字段保证唯一性 我们日常开发中常见这么一个需求要求一个code一个name需要保证code不重复而code是用户输入的常见的就比如一些字典等。 这个的我们常见的几种做法的话。 唯一键 要么就是直接以code作为主键这样的话伪代码基本就是 Transactional(rollbackFor Exception.class)public void add(String code,String name){try{mydao.insert(code,name);}catch (Exception e){throw myException(code不能重复)}}基本就是以code为唯一键当出入出现重复性错误的话捕获后抛出自己封装的异常。 这个当然可以但是如果不让你加唯一键的话你怎么做。 先查后插 经常见的做法的话就是 Transactional(rollbackFor Exception.class)public void add(String code,String name){//操作1先查询数据库有没有int count mydao.select(code);if(count 0){throw myException(code不能重复);}//操作2插入数据库mydao.insert(code,name);}看似逻辑没问题但是如果并发高点就会导致数据库中存在两条以上code一样的数据。 可是为什么呢。 我们来模拟下事务1和事务2同时执行code是一致的。 这个时候事务1的操作1执行发现满足条件。 事务2的操作1也执行因为事务1还没提交自然也没查到数据满足插入条件。 这个时候事务1和事务2的操作2都可以插入自然就插入两条code一致的数据就满足不了唯一性了。 数据库锁 我们可以用数据库的锁来解决。 Transactional(rollbackFor Exception.class)public void add(String code,String name){//操作1先查询数据库有没有 //select code from mytable where code code for updateint count mydao.selectforupdate(code);if(count 0){throw myException(code不能重复);}//操作2插入数据库mydao.insert(code,name);}for update仅适用于InnoDB且必须在事务块(BEGIN/COMMIT)中才能生效。在进行事务操作时通过“for update”语句MySQL会对查询结果集中每行数据都添加排他锁其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。 这个的话就需要注意的是查询走的是索引还是全表扫描要将深入的话基本要讲到索引加锁机制了我们就简单理解为如果code走的索引就行锁不走就全表。 这样事务1和事务2同时执行事务1执行操作1发现加锁成功事务2执行操作1的时候发现加锁失败那事务2就挂起了只能等事务1执行提交事务后才能成功。 这样就保证唯一性。 但是这个缺点比较大的是因为code如果是数据库中没有的code往往会导致加锁的范围比较大。导致接口并发比较低。 分布式锁 我们可以用分布式锁来代替数据库锁。 Transactional(rollbackFor Exception.class)public void add(String code,String name){//操作1用code加锁,用阻塞式加锁,5s后加锁还失败就返回失败boolean success myLock.trylock(code,5);if(!success){throw myException(请重试);}try{//数据库查询codeint count mydao.selectBycode(code);if(count 0){throw myException(code不能重复);}//操作2插入数据库mydao.insert(code,name);}finally {myLock.unLock(code);}}用分布式锁通过code加锁这样的话不同code的插入不影响同一个code同时插入的时候只会有一个插入code执行。 注意还是要数据库查一下加锁只是保证没有多个同一个code同时插入。不能保证数据库就没有code。 还有就是分布式锁的基本操作try{}包一下后最终解锁。 总结 简答的话数据库的唯一索引就好。但是唯一的业务逻辑比较烦的时候考虑一下分布式锁。
http://www.yutouwan.com/news/378892/

相关文章:

  • 麻涌网站仿做上海建设网站价格
  • 东莞网站建设网络公司公司wordpress用户名是哪个文件
  • 专业网站定制哪家好淘宝客15套单页网站程序模板打包
  • 做网站还要写文章吗网站域名后缀的意思
  • 深圳电商平台网站wordpress封采集站ip
  • 杭州网站推广方式顺义区快速建站
  • dw怎么做jsp网站做网站一定要有公司吗
  • 富阳网站建设价格肥料网站建设
  • 网站 备案号 放置只有一个域名怎么做网站
  • python网站开发教程wordpress应用案例
  • 建设一个商城网站大概多少钱站长工具是做什么的
  • 网站运营年度推广方案公众号制作视频教学视频
  • 温州网站建设方案开发百度网页版主页网址
  • 甘德县公司网站建设十大装修公司排行榜
  • 58网站建设58xiamen网页设计板式网站
  • 潍坊市网站建设设计驻马店网站优化
  • 凡科网站源码下载做团购网站怎样赚钱
  • 要做一个网站需要准备什么wordpress菜单文章列表
  • 做h5的网站的区别网站管理助手 mysql
  • wordpress建手机站显示佣金的网站是怎么做的
  • 推荐做ppt照片的网站有什么做衣服的网站好
  • 进口手表网站网址浏览大全
  • 网站建设同行抄袭网络销售网站有哪些
  • 做交易平台的网站需要哪些技术代做通一样的网站
  • 做网站需要知道哪些事情阳江12345网络问政平台
  • 下载爱南宁官方网站东莞百姓网免费发布信息网
  • 网站开发维护求职信网站开发为什么不用cgi了
  • 给村里做网站网站建设经费申请报告
  • 棋牌网站开发工程师荣耀手机商城官方网站售后
  • 网站宣传视频怎么推广自己做的网站