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

网站项目建设周期制作手机app用什么语言

网站项目建设周期,制作手机app用什么语言,网站建设费用明细报价,企业业务系统有哪些1、select for update 的基本语法 SELECT * FROM table_name WHERE condition FOR UPDATE;2、select for update 的定义及作用 2.1 、select for update的含义是在查询数据的同时对所选的数据行进行锁定,以保证数据的一致性和并发控制。在并发环境下,多…

1、select for update 的基本语法

SELECT * FROM table_name WHERE condition FOR UPDATE;

2、select for update 的定义及作用

2.1 、select for update的含义是在查询数据的同时对所选的数据行进行锁定,以保证数据的一致性和并发控制。在并发环境下,多个事务可能同时对同一数据进行读取和修改。如果不加任何锁机制,就会出现脏数据的情况,即一个事务读取了另一个事务尚未提交的数据,导致数据不一致。
2.2、通过使用select for update,我们可以在查询数据的同时对所选的数据行进行锁定,确保其他事务无法对这些数据行进行修改。这种加锁机制可以有效地避免脏数据的问题,保证数据的一致性。

3、基于select for update 实现数据库分布式锁

注意事项

  1. select for update 必须在事务中才会生效。
  2. 该语法适用于mysql的innodb 数据库引擎。

java实现

package com.monika.main.system.lock.impl;import com.monika.main.system.lock.Lock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.beans.factory.InitializingBean;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;/*** @author:whh* @date: 2024-05-11 18:47* <p></p>*/@Component
public class JdbcRowLock implements Lock,InitializingBean {private static final Logger LOG = LoggerFactory.getLogger(JdbcRowLock.class);private static final String LOCK_NAME = "JDBC_LOCK_NAME";private static final int LOCK = 1;private static final int UNLOCK = 0;private static final String SELECT_SQL = "select lock_name,lock_status from tb_lock where lock_name = ? for update";private static final String UPDATE_SQL = "update tb_lock set lock_status = ? where lock_name = ?";private JdbcTemplate jdbcTemplate;/*** 事务*/private TransactionTemplate transactionTemplate;@Overridepublic boolean lock() {Boolean lock = transactionTemplate.execute(action -> {Map<String, Object> result = jdbcTemplate.queryForMap(SELECT_SQL, LOCK_NAME);int lockStatus = (int) result.get("lock_status");if (LOCK == lockStatus) {LOG.info("线程{}获取锁[{}]失败,当前锁已被占用", Thread.currentThread().getName(), LOCK_NAME);return false;}jdbcTemplate.update(UPDATE_SQL, ps -> {ps.setInt(1, LOCK);ps.setString(2, LOCK_NAME);});LOG.info("线程{}获取锁[{}]成功", Thread.currentThread().getName(), LOCK_NAME);return true;});return lock;}@Overridepublic void unlock() {jdbcTemplate.update(UPDATE_SQL, ps -> {ps.setInt(1, UNLOCK);ps.setString(2, LOCK_NAME);});LOG.info("线程{}释放锁[{}]成功", Thread.currentThread().getName(), LOCK_NAME);}@Overridepublic void interrupt() {jdbcTemplate.update(UPDATE_SQL, ps -> {ps.setInt(1, UNLOCK);ps.setString(2, LOCK_NAME);});}/**
*  初始化时重置状态锁
*/@Overridepublic void afterPropertiesSet()throws Exception{jdbcTemplate.update(UPDATE_SQL, ps -> {ps.setInt(1, UNLOCK);ps.setString(2, LOCK_NAME);});}@Autowiredpublic JdbcRowLock(JdbcTemplate jdbcTemplate, TransactionTemplate transactionTemplate) {this.jdbcTemplate = jdbcTemplate;this.transactionTemplate = transactionTemplate;}
}
http://www.yayakq.cn/news/197825/

相关文章:

  • 网站建设深圳给原码青岛东橙网站建设
  • 旅行社电商网站怎么做辽宁建设工程信息网专家库官网
  • 微信公众号和网站建设的意义在哪几个网站里做自媒体赚钱
  • 立方集团 网站菏泽网站建设熊掌号
  • 用户体验网站顺德做营销网站公司
  • 烟台seo做的好的网站wordpress大量发文章
  • 网站建设吉金手指专业15网站投票系统怎么做
  • 网站的按钮怎么做网页设计理念及设计思路
  • 网站建设可以自己建设服务器吗哪个网站开发小程序
  • 江西师范大学两学一做专题网站大连设计工作室
  • 商丘市做1企业网站的公司游戏充值代理平台
  • 四川住房建设厅官方网站北京最新
  • php mysql网站开发全程实例 pdf如何进入wordpress前台
  • 司瓦图网站浏览器主页网址推荐
  • 关于做女装的网站北京列表网
  • 网站备案模板建设银行网站调用支付源码
  • 买了阿里云怎么做网站一起做网店白沟
  • 网站设计O2O平台网上广告怎么推广
  • 郓城做网站哪家好绵阳网站建设scmmwl
  • 成都做网站建设金华做公司网站
  • 教育培训东莞网站建设go做网站
  • 绍兴做网站选哪家网络服务商电话
  • 相城苏州网站建设手机版百度一下
  • 深圳中小企业网站建设wordpress 页脚插件
  • 重庆市建设工程管理协会网站win2003 wordpress 安装
  • 企业网站模板源码起名营销类网站推荐
  • 网站怎么提升实用性ui设计培训班需要学几个月
  • 给网站挂黑链上海畔游网络科技有限公司
  • 可以做围棋题的网站网站不备案会怎么样
  • 海报设计 网站设计一个企业网站报价