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

制作公司内部网站网站建设个人博客

制作公司内部网站,网站建设个人博客,wordpress 无法找到该页,品牌营销做得好的品牌有哪些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/958250/

相关文章:

  • sap.net网站开发谷歌官网下载
  • 东莞制作企业网站公司网站信息批量查询工具
  • 自己建设一个网站软件在线ppt网站
  • 网站如何做ICP备案太原免费自助建站模板
  • 做网站需要什么花费怎样建网站卖东西
  • 网站开发备案需要什么重庆网站制作一般需要多少钱
  • 网站开发文档编写asp.net网站搬迁到移动终端
  • 网站seo新闻谷歌云服务器永久免费
  • 购物网站设计需要哪些模块免费企业网站
  • 做移动端电影网站mvc做的网站如何发布访问
  • 上海知名网站上传到服务器的网站打开是空白
  • 网站建设公司销售前景淘宝刷网站建设
  • 长安高端装备网站设计公司网页排版分析
  • 做游戏网站多钱优化百度搜索
  • 专题网站建设工作建筑工人信息平台
  • 啥是深圳网站建设网络营销教学网站
  • 网站经营性备案流程天蝎网站推广优化
  • 润州网站建设如何写软文
  • 网站空间在线解压自己怎么设计公司前台设计效果图
  • 网站推广方法主要有什么网站卡的原因
  • 手机网站开发位置定位上海整站seo
  • 关于网站建设管理的规定nodejs做视频网站
  • 网站主页的要素苏州中设建设集团有限公司网站
  • 做网站网课网站举报查询进度
  • 做家具的外国网站网站开发与维护就业前景
  • 网站设计样式行业协会网站模板
  • php网站开发手机绑定北京网站seo服务
  • 外国做营销方案的网站东莞门户网站建设报价表
  • 做付费下载的网站太原提高网站排名
  • 布吉网站的建设改图在线处理图片