Dead lock problem
| From: | haiwen zhu | Date: | Mon, 04 Aug 2014 11:44:03 +0000 |
| Subject: | Dead lock problem | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-323715@lists.php.net to get a copy of this message | ||
Problem description as follow:
Table structure:
* CREATE TABLE
test (*
* id int(11) unsigned NOT NULL AUTO_INCREMENT,*
* name char(50) NOT NULL DEFAULT '',*
* PRIMARY KEY (id),*
* UNIQUE KEY name (name)*
*) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8*
*INSERT INTO tes (name) VALUES ('a'),('b');* //make sure 'a' and
'b'
already exists
Script t1.php:
*<?php*
*$db->begin_transaction();*
*$db->query("REPLACE INTO test (name) value ('a')");*
*sleep(5);//make sure script t2 while here*
*$db->query("REPLACE INTO test (name) value ('a')");*
*$db->commit();*
Script t2.php
*<?php*
*$db->begin_transaction();*
*$db->query("REPLACE INTO test (name) value ('b')");*
*$db->commit();*
If execute t2.php after t1.php,there will be a dead lock,
execute *SHOW ENGINE INNODB STATUS* show that dead lack happened on second
sql statment
I hnow mysql have range lock, i still wonder why the second sql statment in
script t1.php grant lock repeated?
Look forward a clear explanation.
--
Best Regards,
HaiwenZhu