mysql数据库行级锁的使用(二)
项目上的另外一个需求是:
在做统计的时候需要将当前表锁定不能更新当前表记录
直接上代码
package com.robert.RedisTest; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.concurrent.TimeUnit; public class JDBCCountLockTest { private static String jdbcUrl = "jdbc:mysql://localhost:3306/test";
private static String username = "test";
private static String password = "test"; public static void main(String[] args) { new Thread(new Runnable(){
public void run(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl,username,password);
connection.setAutoCommit(false);
Statement st = connection.createStatement();
st.executeQuery("select count(1) num from table_name where mobile_phone = '13651969037' and rule_id='39' for update");
TimeUnit.SECONDS.sleep(5);
connection.commit();
System.out.println("Thread 1 commit "+Calendar.getInstance().getTime());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start(); new Thread(new Runnable(){
public void run(){
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(jdbcUrl,username,password);
connection.setAutoCommit(false);
Statement st = connection.createStatement();
TimeUnit.SECONDS.sleep(1);
st.executeQuery("select * from table_name where id=4139 for update");
System.out.println("Thread 2 executeQuery finish "+Calendar.getInstance().getTime());
String update_sql_1 = "update table_name set rule_id='40' where id = '4139'";
st.executeUpdate(update_sql_1);
System.out.println("Thread 2 executeUpdate finish "+Calendar.getInstance().getTime());
connection.commit();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
在Thread 2中 先sleep 1s
保证了Thread 1先执行
然后在Thread 1执行结束之后,Thread 2才能执行更新操作。
执行结果如下:
Thread 1 commit Thu Sep 01 15:58:51 CST 2016
Thread 2 executeQuery finish Thu Sep 01 15:58:51 CST 2016
Thread 2 executeUpdate finish Thu Sep 01 15:58:51 CST 2016
mysql数据库行级锁的使用(二)的更多相关文章
- 关于mysql数据库行级锁的使用(一)
项目上一个业务需要对某条数据库记录加锁,使用的是mysql数据库 因此做了一个关于mysql数据库行级锁的例子做测试 package com.robert.RedisTest; import java ...
- Mysql的行级锁与表级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足. 在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎).表级锁(MYISAM ...
- Mysql的行级锁
我们首先需要知道的一个大前提是:mysql的锁是由具体的存储引擎实现的.所以像Mysql的默认引擎MyISAM和第三方插件引擎 InnoDB的锁实现机制是有区别的. Mysql有三种级别的锁定:表级锁 ...
- mysql innodb 行级锁升级
创建数据表test,表定义如下所示: CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) NO ...
- 你真的会用mysql行级锁吗?mysql 行级锁全解析
在互联网大并发应用大行其道的今天,应用的开发总是离不开锁,在分布式应用中,最常见的莫过于基于数据库的行级锁了,由于互联网公司中比较主流的数据库还是mysql,所以这一话题绕不开的就是mysql了,但是 ...
- 【数据库】数据库的锁机制,MySQL中的行级锁,表级锁,页级锁
转载:http://www.hollischuang.com/archives/914 数据库的读现象浅析中介绍过,在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数 ...
- [数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁
注明: 本文转载自http://www.hollischuang.com/archives/914 在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的 ...
- MySQL行级锁,表级锁,页级锁详解
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- MySQL行级锁、表级锁、页级锁详细介绍
原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...
随机推荐
- webdriver的工作原理
selenium1的原理就是使用js来驱动浏览器,因为现在基本不用,所以不做过多讨论,下面是我整理的webdriver的工作原理,大致就是通过命令请求webdriver,然后webdriver通过浏览 ...
- WPF学习笔记(一):数据绑定之元素到元素绑定
前言 作为一只菜鸟,之前学了一段时间的WPF,但是没有总结,过了一学期发现好多东西都忘记了,很多东西还是需要记下来,以备后续复习. 数据绑定在事件中应用非常广泛,可以有效地减少代码量,那么什么是数据绑 ...
- HMAC算法AS3版
http://www.cnblogs.com/appleseed/archive/2008/09/17/1292232.html
- Java之线程处理之二
No.1编写一个打印机类 写两个方法 public class Printer { public void print1() { System.out.print("微"); Sy ...
- [No000044]你是否还傻到把最好的留在最后?
想写这篇文章很久了. 因为一直觉得我们人有一个毛病,总是喜欢将最好的东西留到最后才享用,或者等最后再给别人. 但人们往往忽略了至关重要的一点,就是这个最好有一个保质期.可以说人能拥有的快乐触发点.有机 ...
- EF的入门使用 (电影管理)
控制器代码: public class HomeController : Controller { private NewDBContext ndc = new NewDBContext(); pub ...
- ios客户端快速滚动和回弹效果的实现
现在很多for Mobile的HTML5网页内都有快速滚动和回弹的效果,看上去和原生app的效率都有得一拼. 要实现这个效果很简单,只需要给容器加一行css代码即可 -webkit-overflow- ...
- bzoj3339 rmq problem (range mex query)
给一个长度为n的数列a,q个询问,每次询问一段区间的mex.(没有出现过的最小非负整数) 1<=n,q<=200000,0<=ai<=200000. 题解1 莫队 我们将权值分 ...
- python实现一个图灵机器人
这标题就是个噱头...其实用的别人的接口,就是这货. 下面是代码: # -*- coding: utf-8 -*- import urllib,urllib2 import sys import js ...
- ubuntu 12.04下zmap安装
zmap介绍 https://zmap.io/ ----------------华丽的分割线---------------- zmap 1.03 的安装 Step1: sudo apt-get ins ...