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

洛阳网站建设价格低/北京互联网营销公司

洛阳网站建设价格低,北京互联网营销公司,成都酒店网站建设,人力资源和社会保障部证书有用吗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.bjxfkj.com.cn/article/495.html

相关文章:

  • 继续访问这个网站/个人网站推广怎么做
  • 罗田企业网站建设/阿里云域名注册入口
  • 专业网站是什么意思/天津seo优化公司
  • 微信网页版文件传输助手/昭通网站seo
  • 昆明做网站公司有哪些/深圳20网络推广
  • 电商网站开发制作/排名优化方案
  • 自创网站怎么赚钱/站长工具seo查询5g5g
  • 网页设计实训报告心得/在线排名优化工具
  • 三只松鼠电商网站建设/海外推广渠道
  • 2 试列出网站开发建设的步骤/百度商店
  • 做一个国外网站/手机怎么制作网页
  • 暖暖社区免费观看高清完整版/seo是怎么优化上去
  • 北京网站制作公司招聘/推广网
  • 山东富泰建设工程有限公司网站/产品关键词大全
  • 网站静态首页模板/东莞seo排名优化
  • asp net做网站视频/端点seo博客
  • 福田网站建设深圳信科/纯注册app拉新挣钱
  • 营销网站建设培训/茶叶推广软文
  • 去哪学做网站/郑州搜索引擎优化公司
  • 怎么自己做网站免费的/百色seo外包
  • 东莞塘厦网站建设/蚂蚁bt
  • 建设企业网银u盾网站打不开/晋中网站seo
  • 广州网站建设 易点/万网是什么网站
  • 衢州网站制作/广告接单有什么平台
  • 有口碑的常州网站优化/杭州关键词推广优化方案
  • 网站做关键词搜索要好多钱/上海seo有哪些公司
  • 给公司网站做seo的好处/优质友情链接
  • 手机网站免费空间/搜索引擎营销就是seo
  • 不知此网站枉做男人/全是广告的网站
  • 怎么查看网站是否做百度排名/seo关键词外包公司