易截截图软件、单文件、免安装、纯绿色、仅160KB

MySQL行锁深入研究

      做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统。假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为 :
Select restnum from book where id =1 ;
-- 如果 restnum 大于 0 ,执行 update
Update book set restnum=restnum-1 where id=1 ;
      问题就来了,当 2 个人同时来借的时候,有可能第一个人执行 select 语句的时候,第二个人插了进来,在第一个人没来得及更新 book 表的时候,第二个人查到数据了,其实是脏数据,因为第一个人会把 restnum 值减 1 ,因此第二个人本来应该是查到 id=1 的书 restnum 为 0 了,因此不会执行 update ,而会告诉它 id=1 的书没有库存 了,可是数据库哪懂这些,数据库只负责执行一条条 SQL 语句,它才不管中间有没有其他 sql 语句插进来,它也不知道要把一个 session 的 sql 语句执行完再执行另一个 session 的。因此会导致并发的时候 restnum 最后的结果为 -1 ,显然这是不合理的,所以,才出现锁的概念, Mysql 使用 innodb 引擎可以通过索引 对数据行加锁。以上借书的语句变为:
Begin;
Select restnum from book where id =1 for update ;
-- 给 id=1 的行加上排它锁且 id 有索引
Update book set restnum=restnum-1 where id=1 ;
Commit;
这样,第二个人执行到 select 语句的时候就会处于等待状态直到第一个人执行 commit 。从而保证了第二个人不会读到第一个人修改前的数据。
那这样是不是万无一失了呢,答案是否定的。看下面的例子。
 
跟我一步一步来,先建立表
CREATE TABLE `book` (
`id` int(11) NOT NULL auto_increment,
`num` int(11) default NULL,
`name` varchar(20) default NULL, //原贴是varchar(0)应该是笔误,这里tenfy改成varchar(20)
PRIMARY KEY (`id`),
KEY `asd` (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
其中 num 字段加了索引
然后插入数据,运行, 
insert into book(num) values(11),(11),(11),(11),(11);
insert into book(num) values(22),(22),(22),(22),(22);
 
 
然后打开 2 个 mysql 控制台窗口,其实就是建立 2 个 session 做并发操作
*************************************


相关文档:

实现Java连接mysql(源码)!

Java连接mysql数据库,代码经过运行准确无误。
下面为实例---->
用数据库操纵工具(例:SQLyogEnt)操纵mysql建表,或dos下建,如下:
数据库名:scutcs
表名:student
表内容:
sno  char[7]  NO NULL Primary Key;
sname  varchar[8]  NO NULL;
sex  char[2]  NO NULL; ......

MySQL多表同时插入

Real example:
/*************************by garcon1986*********************************************************/
<?php
// get the values from entreprise creation form
$secteur = $_POST['secteur'];
$nom = $_POST['nom_entreprise'];
$taille = $_POST['taille_entreprise'];
$concurrent = $_POST[' ......

Twitter用户暴增20倍 欲弃用MySQL数据库

     Twitter公司一位名叫Ryan King的工程师日前向博客MyNoSQL透露,公司计划从MySQL迁移到Cassandra数据库,因为后者具有更大的弹性、可扩展性和大量的社区网络开源开发人员。
我们有大量的数据,在数据巨大,增长率正在加速的情况下,我们需要一个系统,它可以更为自动化,并高度可靠、可用。Ryan K ......

MySQL行锁深入研究

做项目时由于业务逻辑的需要,必须对数据表的一行或多行加入行锁,举个最简单的例子,图书借阅系统。假设 id=1 的这本书库存为 1 ,但是有 2 个人同时来借这本书,此处的逻辑为
view plaincopy to clipboardprint?
Select   restnum  from  book  where  id =1 ;     ......

windows 7下如何安装Apache + PHP + MySQL + SVN等等

近来对php比较感兴趣,就断断续续的花了两个星期的时间把整个php开发需要用到的东西都装好了,大概的安装过程如下。
一、安装的软件:
Apache: 2.2.14
PHP:5.2.12
MySQL:5.1.42。
SVN:1.5.6
PHPMyAdmin:3.2.5
Zend Studio: 7.1
Zend Debugger: 5.1.14
二、安装过程:
1. 安装和配置apache
安装:首先从http://apa ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号