<?php
class Transaction {
// 数据库连接对象
public $link = null;
function __construct() {
$this->link = mysqli_connect ( '192.168.1.222', 'wedai', 'wedai', 'test' );
mysqli_query ( $this->link, "set names 'UTF-8'" );
mysqli_query ( $this->link, 'START TRANSACTION' );
}
// 并发测试
function concurrent() {
mysqli_query ( $this->link, "set session transaction isolation level read uncommitted" );
// 设定延迟,单位微秒,1微秒等于百万分之一秒
usleep ( rand ( 50, 500 ) );
// 先查询一次
$que = $this->selt1 ();
// 库存大于0时允许减1
if ($que ['storage_num'] > 0) {
// 增加条件 WHERE storage_num > 0
$sql = "UPDATE t1 SET storage_num = storage_num - 1 WHERE storage_num > 0";
mysqli_query ( $this->link, $sql );
// 再次查询
$que = $this->selt1 ();
if ($que ['storage_num'] >= 0) {
mysqli_query ( $this->link, "COMMIT" );
echo "减1成功";
} else {
mysqli_query ( $this->link, "ROLLBACK" );
echo "减1失败";
}
}
}
//查询返回一条id=1的数据
function selt1() {
$sql = "SELECT * FROM t1 WHERE id = 1";
$que = mysqli_query ( $this->link, $sql );
return mysqli_fetch_array ( $que );
}
}
header ( 'Content-type: text/html; charset=utf-8' );
$ransaction = new Transaction ();
$ransaction->concurrent ();
?>