返回顶部
首页 > 资讯 > 后端开发 > Python >Java操作数据库(行级锁,forupdate)
  • 654
分享到

Java操作数据库(行级锁,forupdate)

2024-04-02 19:04:59 654人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、悲观锁(也叫行级锁)1.使用悲观锁(在事务中的sql语句中使用)2..完整代码3..测试代码4.结论一、悲观锁(也叫行级锁) 在本次事务的执行过程当中,我们指定的记录被查询,

一、悲观锁(也叫行级锁)

在本次事务的执行过程当中,我们指定的记录被查询,在我查询的过程当中记录就会被锁定,任何人,任何事务都不能对我指定查询数据进行修改操作(不能改,但是可以看),直到我都查询结束。

1.使用悲观锁(在事务中的sql语句中使用)


//sql指令
            String sql = "select * from  t_shuihuo where id < ? for update ";


2..完整代码


package com.luosf.jdbc;
 
import com.luosf.jdbc.utils.JdbcUtil;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
 

public class JdbcLock {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stat = null;
        ResultSet res = null;
        try {
            //创建驱动
 
            //获取数据库对象
             conn = JdbcUtil.getConnection();
 
            //sql指令
            String sql = "select * from  t_shuihuo where id < ? for update ";
 
            conn.setAutoCommit(false);//开启事务
 
            //3,sql语句进行编译
            stat = conn.prepareStatement(sql);
 
            //给占位符填充值
            //JDBC下标从1开始的
            stat.setInt(1,16); //1,代表第一个问号
 
            Thread.sleep(1000*10); //模拟访问时间
 
            //4,执行sql
            res = stat.executeQuery();
 
            //5,处理查询结果集
            while (res.next()){
                int id = res.getInt("id");
                String name = res.getString("name");
                String nickname = res.getString("nickname");
                System.out.println("id :"+ id + "  name :" +name + "  昵称 :"+nickname);
            }
            conn.commit();//提交事务
        } catch (SQLException throwables) {
            try {
                if (conn != null){
                    conn.rollback(); //回滚事务
                }
 
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally{
            //释放资源
            JdbcUtil.close(conn,stat,res);
        }
    }
}

3..测试代码


package com.luosf.jdbc;
 
import com.luosf.jdbc.utils.JdbcUtil;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
 

public class JdbcLockTest {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement stat = null;
 
        try {
            //获取驱动
 
            //获取数据库链接对象
            conn = JdbcUtil.getConnection();
 
            //开启事务
            conn.setAutoCommit(false);
 
            //锁开始后进行修改数据
            String sql = "update t_shuihuo set name = '小罗' where id  = ?  ";
            stat = conn.prepareStatement(sql);
 
            stat.setInt(1,10); //1,代表第一个问号
 
            int cunt = stat.executeUpdate();
            System.out.println("更新了"+cunt+"条数据");
 
            conn.commit();//提交事务
        } catch (SQLException throwables) {
            try {
                if (conn != null){
                    conn.rollback();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        } finally {
            //释放资源
           JdbcUtil.close(conn,stat,null);
        }
    }
}


需要等锁等待时间完成才能进行修改

4.结论

在MySQL当中:

在执行“select ... from ....whrer ...for update ”对,Mysql进行row lock(行锁) 还是 table lock(表锁),取决于是否使用索引(如主键,unique字段),则为row lock(行锁),否则为 table lock(表锁),没有查找到数据为无锁,当使用“<>” 或者“like”时,索引会失效,进行 table lock(表锁)。

简单点来说就是for update最好锁 主键或者unique字段,锁其他字段会导致整张表被锁。导致性能的降低

到此这篇关于Java操作数据库(行级锁,for update)的文章就介绍到这了,更多相关Java操作数据库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java操作数据库(行级锁,forupdate)

本文链接: https://lsjlt.com/news/159962.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java操作数据库(行级锁,forupdate)
    目录一、悲观锁(也叫行级锁)1.使用悲观锁(在事务中的sql语句中使用)2..完整代码3..测试代码4.结论一、悲观锁(也叫行级锁) 在本次事务的执行过程当中,我们指定的记录被查询,...
    99+
    2024-04-02
  • mysql数据库中行级锁、表级锁和页级锁的区别是什么
    这篇文章主要介绍了mysql数据库中行级锁、表级锁和页级锁的区别是什么,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。按粒度可以分为:1、行级锁,MySQL中锁定粒度最细的一种锁,表示只针...
    99+
    2024-04-02
  • MySQL数据库高级操作示例
    小编给大家分享一下MySQL数据库高级操作示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!文章目录数据表高级操作准备工作:安装...
    99+
    2024-04-02
  • Mysql数据库操作(命令行)
    1 环境   树莓派:   mysql:   2  指令   以下是从命令行中连接mysql服务器的简单实例:   [root@host]# mysql -u root -p Enter password:****** ...
    99+
    2018-02-06
    Mysql数据库操作(命令行)
  • 数据库操作行为规范
    (建立一个和原表相同的新表,并做表结构修改,然后将原表中的数据复制到新表中,并在原表上增加触发器,把表新增的数据也复制到新表中,在行的所有数据完成后,在原表上增加个时间很短的时间锁,把新表命名成原表,再删除...
    99+
    2024-04-02
  • MySQL数据库高级数据操作之新增数据
    目录多数据插入主键冲突1、主键冲突更新2、主键冲突替换蠕虫复制多数据插入 只要写一次insert,可以插入多条数据 基本语法: insert into 表名 [(字段列表)] val...
    99+
    2024-04-02
  • [Java Web]JDBC->Java操作MySQL数据库
    目录 1、简介 1.1、背景 1.2、概念 1.3、驱动程序 2、JDBC的优点 3、使用步骤 3.1、操作流程 3.2、代码步骤 3.3、实例演示 3.3.1、创建空工程 3.3.2、指定项目的名称以及存放路径 3.3.3、设置项目的J...
    99+
    2023-10-27
    数据库 java mysql web
  • 数据库批量操作锁定和释放库存
    type类型:1锁定,2释放 实现思路:利用【case when and then end】来判断锁定和释放是否超过库存限制,若是超过则SQL不成立,执行后会报错,表示锁定或释放库存失败 update stock_re...
    99+
    2023-09-01
    mysql
  • 操作MySQL数据库的高级方法
    下文主要给大家带来操作MySQL数据库的高级方法,希望这些内容能够带给大家实际用处,这也是我编辑操作MySQL数据库的高级方法这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。1.数据备份与还原(1)...
    99+
    2024-04-02
  • MySQL数据库InnoDB引擎行级锁锁定范围是什么
    这篇文章主要介绍MySQL数据库InnoDB引擎行级锁锁定范围是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!         ...
    99+
    2024-04-02
  • Postgresql数据库命令行、数据库、表空间操作
    一、查看数据库和表 列出数据库: 您可以使用以下任何一个命令列出PostgreSQL中的所有数据库。 postgres=# list postgres=# l 列出数据库中所有表: 要列出任何数据库的表先连接到数据库,然后查看该...
    99+
    2020-07-31
    Postgresql数据库命令行 数据库 表空间操作
  • 40.mongo命令行操作数据库
    1. 登陆数据库mongo ip:port 2. 显示数据库show dbs3. 进去数据库 use xxxdb4. 查询表show collections5. 查询数据db.xxxco...
    99+
    2024-04-02
  • SpringJdbcTemplate执行数据库操作详解
    目录如何使用数据库操作添加修改删除查询批量操作说明:基于atguigu笔记。 JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使JDBC更加易于使用,Jdbc...
    99+
    2022-11-13
    Spring JdbcTemplate Spring JdbcTemplate操作数据库
  • MySQL数据库高级数据操作之怎么新增数据
    本篇内容主要讲解“MySQL数据库高级数据操作之怎么新增数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL数据库高级数据操作之怎么新增数据”吧!多数据插入只要写一次insert,可以插...
    99+
    2023-06-30
  • Java中怎么操作MongoDB数据库
    今天就跟大家聊聊有关Java中怎么操作MongoDB数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java与mongodb的连接1. 连单台m...
    99+
    2024-04-02
  • 数据库死锁分析(行锁、间隙锁)
      分享遇到过的一种间隙锁导致的死锁案例。文后有总结知识供参考   日志出现:Deadlock found when trying to get lock; try restarting transaction 导致原因:并发导致的数据库...
    99+
    2015-10-31
    数据库死锁分析(行锁 间隙锁)
  • 【MySQL】数据库——库操作
    文章目录 1. 创建数据库[IF NOT EXISTS] 的使用 2. 删除库3. 数据库的编码问题查看系统默认支持的字符集查看系统默认支持的校验集只查看 database的校验集指定编码...
    99+
    2023-10-20
    数据库 mysql
  • Lua中怎么进行数据库操作
    在Lua中进行数据库操作可以使用第三方库,比如luasql。以下是一个简单的示例: local luasql = require &...
    99+
    2024-04-09
    Lua
  • 常见MongoDB数据库操作产生的锁总结
    MongoDB使用的是读写锁,写锁优先级高,同时有读写请求的情况下,优先满足写锁。在2.2版本以前,锁级别是全局锁,2.2版本后是数据库级的锁。3.0后引入WiredTiger引擎,加入了文档级锁。 操...
    99+
    2024-04-02
  • 使用Java如何连接MySQL数据库并进行操作
    这篇文章给大家介绍使用Java如何连接MySQL数据库并进行操作,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 连接数据库  (1) 下载Mysql连接驱动网址: http://dev.mysql.com/down...
    99+
    2023-05-31
    java mysql 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作