我的表:
CREATE TABLE IF NOT EXISTS `detail_transaction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`code` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`id_product` int(11) NOT NULL,
`id_store` int(11) NOT NULL,
`input_quality` int(11) NOT NULL,
`output_quality` int(11) NOT NULL,
`quality_in_store` int(11) NOT NULL,
PRIMARY KEY (`id`)
)
我遇到的问题如下:
我得到记录有max_id,然后在我插入新记录之前,有 插入了另一个进程插入新记录。
我想:我会在“我选择一条记录有max_id”到“我已完成插入新的下一条记录”时锁定表格(不要对该表运行任何任务)。并做这个方法。请帮我!如何通过php代码或Yii执行此操作。
答案 0 :(得分:2)
您可以使用交易:
$transaction = Yii::app()->db->beginTransaction();
try {
foreach ($items as $item) {
$item->attr = value;
$item->save();
}
$transaction->commit();
// actions to do on success (redirect, alert, etc.)
} catch (Exception $e) {
$transaction->rollBack();
// other actions to perform on fail (redirect, alert, etc.)
}
此源代码来自此帖子:using transaction in a loop in yii
答案 1 :(得分:0)
我不确定你想要实现什么,但我确信如果你只使用交易 - http://www.yiiframework.com/doc-2.0/yii-db-transaction.html它会有效。否则,您始终可以调用LOCK TABLE查询 - http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html。
$connection = Yii::app()->db;
$lock = $connection-> createCommand('LOCK TABLES `detail_transactions` WRITE');
// do your magic
$unlock = $connection-> createCommand('UNLOCK TABLES');
答案 2 :(得分:0)
在Yii2中,你可以像这样锁定/解锁一个表
$db = Yii::$app->getDb();
$db ->createCommand('LOCK TABLES `YOUR_TABLE` WRITE')->execute();
// access YOUR_TABLE here
// something like YOUR_TABLE_MODEL::find()->where(["something" => "blah"])->one()
$db ->createCommand('UNLOCK TABLES')->execute();