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

做经销找厂家好的网站中国十大网站排名

做经销找厂家好的网站,中国十大网站排名,建设一个商务网站的步骤,wordpress 安装500错误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.mnyf.cn/news/50713.html

相关文章:

  • 做暧暧小视频免费网站it培训班大概需要多少钱
  • 乐清做网站公司哪家好重庆seo网站哪家好
  • 东莞网站外包网络营销师证书怎么考
  • 网站制作 牛商网今日头条热点新闻
  • 合肥网站设计制作网络营销的主要推广方式
  • 可以用足球做的游戏视频网站云南seo网络优化师
  • 电子商务公司招聘网站优化排名易下拉排名
  • 网站源码建设模板关键词优化技巧有哪些
  • 旅游网站这么做长沙百度推广排名
  • 医院网站建设 利法拉网络百度关键词推广怎么收费
  • 如何做网站页面广州最新疫情通报
  • 衡水专业做网站深圳seo优化服务
  • dw如何做网站企业网站怎么推广
  • 微信开发商seo工具不包括
  • 海珠区pc端网站建设竞价排名机制
  • 做电影网站要怎么样的主机b2b电商平台
  • 深圳网站建设平台成都网站快速开发
  • 网站建设公司怎么盈利seo整站优化哪家好
  • 企业网站建设进度快速排名优化推广价格
  • 好的竞价推广外包公司深圳搜索排名优化
  • 太原市零元网站建设搜索引擎优化内容包括哪些方面
  • 河源公司做网站数据分析培训课程
  • 做外挂网站空间潍坊做网站公司
  • 哪里做网站一套一百建站abc官方网站
  • 自己做网站在线客服系统自媒体是什么
  • 自贡建设机械网站怎么弄自己的网站
  • 软件技术女生学怎么样莆田百度快照优化
  • 怎样给网站做排名优化seo企业站收录
  • 天津做系统集成的公司网站适合企业员工培训的课程
  • 网页设计与网站建设专业营销推广计划怎么写