Mysql 如何在CakePHP中锁定数据库表

Mysql 如何在CakePHP中锁定数据库表,mysql,database,cakephp,locking,Mysql,Database,Cakephp,Locking,数据库模式:预订号(主要,非自动公司),费用(浮动),等等 每次插入时,“预订编号”都将递增。 这不是由数据库本身自动递增的。 “预订编号”必须在代码中递增,并且由于其他原因无法自动完成 如果我想插入一行,我将阅读最后一行 “booking_number”,将其递增,并将新行写回数据库。 同时,另一个用户也在插入一行,他读取 “预订号”的最后一项与我读到的相同,因为我没有 然而写下了新的一行。他还将增加到相同的值和 把它写回去。这将导致冲突 这样,如果我可以锁定db表,其他人就无法读取/写入 直

数据库模式:预订号(主要,非自动公司),费用(浮动),等等

每次插入时,“预订编号”都将递增。 这不是由数据库本身自动递增的。 “预订编号”必须在代码中递增,并且由于其他原因无法自动完成

如果我想插入一行,我将阅读最后一行 “booking_number”,将其递增,并将新行写回数据库。 同时,另一个用户也在插入一行,他读取 “预订号”的最后一项与我读到的相同,因为我没有 然而写下了新的一行。他还将增加到相同的值和 把它写回去。这将导致冲突

这样,如果我可以锁定db表,其他人就无法读取/写入 直到有人读写完新行为止

我可以用cakephp锁定数据库表吗? 我在哪里可以得到参考书或代码

感谢您的帮助

试试这个

$model = $this->loadModel('Info_Table'); 
// if Info_Table model is not available in your controller
$dbo = $model->getDataSource();

$dbo->execute(
        sprintf('LOCK TABLES %s AS %s WRITE;',
            $model->table,
            $model->alias
        )
    );

 // execute query 
$dbo->execute('UNLOCK TABLES');

您可能不需要为此锁定表。只需按照描述运行代码。当第二个进程尝试添加具有相同值的新行时,会捕获重复键错误。当被抓到的时候,重新执行。是的,我也这么想。可以通过创建view/Errors/pdo_error.ctp自定义错误消息。并显示消息以重试客户。对吗@AgRizzoif我的表名是info_table。我可以这样试试吗<代码>$dbo=Info_Table->getDataSource()$dbo->execute(sprintf('LOCK TABLES%s AS%s WRITE;',$model->Info_Table,$model->Info_Table))$NewAutoID=Info_Table->find('first',array('fields'=>array('booking_number'),'order'=>array('booking_number'=>'DESC'))$dbo->execute('UNLOCK TABLES')@u2460470$model是一个模型对象。型号名称是什么?型号名称是信息表。表名是iFoiTable。FiONA,我已经修改了我的代码作为模型对象。即使我已经锁定了表,假设两个用户同时尝试预订(完全相同),这意味着他们可以在相同的时间锁定表。所以可以说这是一个死锁或锁冲突??我如何预防这种情况??我需要在某些地方设置锁定时间设置吗??如果我错了,请纠正我。提前谢谢@u2460470