MySQL中select * for update锁表的问题
select * for update锁表的问题
由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例) ,否则MySQL将会执行Table Lock (将整个资料表单给锁住)。
举个例子:
假设有个表单products ,里面有id跟name二个栏位,id是主键。
例1: (明确指定主键,并且有此笔资料,row lock)
SELECT * from products WHERE id='3' FOR UPDATE;
例2: (明确指定主键,若查无此笔资料,无lock)
SELECT * from products WHERE id='-1' FOR UPDATE;
例2: (无主键,table lock)
SELECT * from products WHERE name='Mouse' FOR UPDATE;
例3: (主键不明确,table lock)
SELECT * from products WHERE id<>'3' FOR UPDATE;
例4: (主键不明确,table lock)
SELECT * from products WHERE id LIKE '3' FOR UPDATE;
注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。
注2: 要测试
锁定的状况,可以利用MySQL的Command Mode ,开二个视窗来做测试。
相关文档:
MySQL
是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由
于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
1、phpMyAdmin(http://www.phpmyadmin.ne ......
Mysql my.ini 配置文件详解
#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO
#
# 此mysql配置文件例子针对4G内存
# 主要使用INNODB
#处理复杂队列并且连接数量较少的mysql服务器
#
# 将此文件复制到/etc/my.cnf 作为全局设置,
# mysql-data-d ......
1、新建数据源文件mysql-ds.xml,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/mydatabase?useUnico ......
如果你搜索GOOGLE,你会找到很多关于mysql的随机数,他们会这样说
生成3,6之间的随机整数
FLOOR(3 + (RAND() * 6))
在4后面添加一个3到6之间的整数
CONCAT(343,FLOOR(3 + (RAND() * 6)))
在某一字段后面添加一位3,6之间的整数
UPDATE test SET xx= CONCAT(xx,FLOOR(3 +(RAND() * 6)));
但是我私自测试了一下, ......
http://www.mysql.cn/
事务,参数,嵌套调用,游标,循环, 触发器,视图,约束, 索引,。。。
1. 创建实例数据库
create database db5;
use db5;
2.创建一个简单的工作表,并插入数据
create table t(s1 int);
insert into t values(5);
3.创建程序实例 crea ......