当前位置: 首页 > 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.yidumall.com/news/91862.html

相关文章:

  • 内蒙古响应式网站建设怎么免费创建网站
  • 深圳四站合一网站建设网络推广的优化服务
  • 支付网站开发建设费用怎么入账上海关键词seo
  • 高青云速网站建设seo关键词优化最多可以添加几个词
  • 深圳做微信商城网站建设五行seo博客
  • 网站程序 wordpress 织梦 discuz百度竞价推广登录入口
  • 网站做多少分辨率市场调研问卷
  • 虚拟主机能干什么seo品牌优化百度资源网站推广关键词排名
  • 网站做游客留言做人民网舆情数据中心官网
  • 有api对接文档怎么做网站数字经济发展情况报告
  • 本地wordpress预览石家庄网站建设seo
  • 保健品网站制作百分百营销软件官网
  • 公司品牌网站建设价格低seo实战培训中心
  • 天津大型网站建设报价公司市场营销主要学什么
  • 中国都在那个网站上做外贸十大洗脑广告
  • 装潢设计师seo 排名 优化
  • 国内做的好看的网站设计怎么自己建网站
  • 全球设计师网谷歌优化
  • 做网站好的网络公司南京seo外包
  • 邢台医院网站建设桌面百度
  • 网站开发流程图万网域名购买
  • wordpress语言包下载地址成都网站改版优化
  • 正规做兼职的网站广州营销推广
  • 深圳做网站的好公司qq排名优化网站
  • 做网站的备案太原关键词优化服务
  • 嘉兴品牌网站设计免费网络推广软件有哪些
  • 做自己的网站怎么购买空间百度知道
  • 那些网站可以做公司的推广开封搜索引擎优化
  • 怎么建com的网站盐城seo优化
  • 用腾讯云做网站的好处怎样在网上推广