mysql - 仅在第一条语句完成后执行第二条语句
问题描述
从 mysql 表中首先要删除行。只有在删除行之后,我才想选择 sum(certain_column)。想确保在删除行之前,我不执行选择。
决定使用这样的代码:
try{
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$db->beginTransaction();
try{
$stmt_delete = $db->prepare('DELETE FROM `table` WHERE `Id` = 1;');
$stmt_delete_items->execute( );
}
catch (PDOException $e){
echo "DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
$db->rollBack();
exit;
}
try{
$stmt_select = $db->prepare('SELECT SUM(`Quantity`) AS `SumQuantity` FROM `table` WHERE `some_column` = 234;');
$stmt_select->execute( );
$arr_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e){
echo "DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
}
$db->commit();
}
期待第一次执行$stmt_delete
,然后才执行$stmt_select
。在通常情况下,我会得到这样的执行顺序。但是能保证100%吗?在某处读取删除可能比选择花费更多时间...exit;
只有在出现错误的情况下才会阻止下一次执行。但我需要推迟$stmt_select
到$stmt_delete
。
或者可能更好用START TRANSACTION; ... COMMIT;
。或者可能是为了DELETE
使用LOCK TABLES ... UNLOCK TABLES
。
请建议解决方案 100% 确保选择仅在删除完成后执行。
解决方案
推荐阅读
- android - Flutter web:如何以步进形式进行水平滚动?
- ios - 优雅的方式在 Swift Combine 中组合Latest,而不会丢失价值和不平衡的发布者
- html - CSS:背景图像有时会在移动设备上丢失
- php - 如何使用 htaccesss 而不是文件夹仅提供图像
- python - Python - 使用 MS Azure 训练自定义语音的 API
- subtotal - 小计 VBA 问题
- python - 在一条曲线中绘制两个返回的列表
- visual-studio - 如何在 Microsoft Visual Studio 中禁用滚动越过文件的底线?
- django - Django,模型过滤器和其他外键模型排序
- c# - 如何在 C# 中计算屏幕上任意位置的鼠标点击次数?