由于业务需要, 一个表不允许两个及以上用户同时操作.由于是mysql4.1 事务等高级特性就不用想了, 存储引擎统一使用的MyISAM.其实转换成InnoDB 就可以使用行级锁了, 但是由于是线上正在使用的数据库, 数据量比较大,转换怕出现意外. 要实现的功能又是在后台使用. 所以就直接使用表级锁完全可以了.在mysql中对表加锁和解锁其实挺简单的
LOCK TABLE table_name;
UNLOCK TABLE;
demo
<?php
$db = new Mysql();
$db->open();
$db->query("lock table " . $table);
$sql = "SELECT * FROM ${table} WHERE gid='${gid}' AND sid IS NULL LIMIT 1";
$row = $db->fetch($db->query($sql));
$success = false;
$re = array();
if($row){
$id = $row['id'];
$update_data = array(
'udate' => date('Y-m-d H:i:s'),
'tuid' => $uid,
'operator' => $_COOKIE['admin_name'],
'sid' => $sid,
);
$db->update($this->table, $update_data, "id='$id'");
$result = $db->getAffectedRows();
if($result > 0){
$success = true;
$re = $row;
}else{
$msg = '发生错误: 物品库存修改失败!';
}
}else{
$msg = '库存不足';
}
$db->query("unlock table");
$db->close();
//return array($success, $msg, $re);