Отказ сериализации: 1213 тупик найден при попытке получить блокировку; Попробуйте перезапустить транзакциюPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Отказ сериализации: 1213 тупик найден при попытке получить блокировку; Попробуйте перезапустить транзакцию

Сообщение Anonymous »

Я сталкиваюсь с проблемой с тупиком, но я не могу понять, как оба транзакции связаны и выводят тупик.
transactiion 1: sqlstate [40001]: отказ сериализации: 1213 тупик, найденный при попытке получить блокировку; Выполняемый SQL был: < /p>
UPDATE job_instruction ji\n
INNER JOIN ji_temp2 ON ji.id = ji_temp2.id\n
SET ji.job_instruction_group_id = ji_temp2.job_instruction_group_id"
< /code>
Транзакция 2: sqlstate [hy000]: общая ошибка: 1205 Тайм -аут ожидания.UPDATE inventory SET
on_hand_quantity = ifnull(on_hand_quantity,0) + (1)\n
,allocated_quantity = ifnull(allocated_quantity,0) + (1)\n
,in_transit_quantity = ifnull(in_transit_quantity,0) + (-1)\n
,suspended_quantity = ifnull(suspended_quantity,0) + (0)\n
,updated_at = 1737630861\n
WHERE id = 2474210
< /code>
Код PHP для транзакции 1: < /p>
\Yii::$app->db->createCommand()->batchInsert(
JobInstructionGroup::tableName(),
['job_id', 'unit_of_measure', 'inventory_id', 'units', 'quantity', 'out_bound_status_flow_id', 'created_at', 'updated_at', 'created_by', 'updated_by'],
$job_instruction_groups
)->execute();
foreach ($processedCombinations as $data) {
if ($data['count'] > 1) {
$job_instruction_groups[] = [
'job_id' => $data['job_id'],
'unit_of_measure' => $data['unit_of_measure'],
'inventory_id' => $data['inventory_id'],
'units' => $data['units'],
'quantity' => $data['quantity'],
'out_bound_status_flow_id' => $data['out_bound_status_flow_id'],
'created_at' => time(),
'updated_at' => time(),
'created_by' => \Yii::$app->user->identity->id,
'updated_by' => \Yii::$app->user->identity->id,
];
$jobIds[] = $data['job_id'];
// $inventoryIds[] = $data['inventory_id'];
// $outBoundStatusFlowIds[] = $data['out_bound_status_flow_id'];

}
}

\Yii::$app->db->createCommand("CREATE TEMPORARY TABLE ji_temp1 AS SELECT * FROM job_instruction WHERE job_instruction.job_id IN (".implode(',',array_unique($jobIds)).")")->execute();
\Yii::$app->db->createCommand("

CREATE TEMPORARY TABLE ji_temp2 AS SELECT ji_temp1.id,
job_instruction_group.id AS job_instruction_group_id
from ji_temp1

INNER JOIN shipment_detail_child
ON shipment_detail_child.job_instruction_id = ji_temp1.id

INNER JOIN shipment_detail
ON shipment_detail.id = shipment_detail_child.shipment_detail_id

INNER JOIN shipment_header
ON shipment_header.id = shipment_detail.shipment_header_id

INNER JOIN job_instruction_group
ON job_instruction_group.job_id = ji_temp1.job_id

AND job_instruction_group.inventory_id = ji_temp1.inventory_id
AND job_instruction_group.out_bound_status_flow_id = shipment_header.out_bound_status_flow_id")->execute();

\Yii::$app->db->createCommand("
UPDATE job_instruction ji
INNER JOIN ji_temp2 ON ji.id = ji_temp2.id
SET ji.job_instruction_group_id = ji_temp2.job_instruction_group_id")->execute();
< /code>
Код PHP для транзакции 2: < /p>
Yii::$app->db->createCommand('UPDATE inventory SET
on_hand_quantity = ifnull(on_hand_quantity,0) + (:on_hand_quantity)
,allocated_quantity = ifnull(allocated_quantity,0) + (:allocated_quantity)
,in_transit_quantity = ifnull(in_transit_quantity,0) + (:in_transit_quantity)
,suspended_quantity = ifnull(suspended_quantity,0) + (:suspended_quantity)
,updated_at = :updated_at
WHERE id = :id',
[ ':id' => $id,
':on_hand_quantity'=>$on_hand_quantity,
':allocated_quantity'=>$allocated_quantity,
':suspended_quantity'=>$suspended_quantity,
':in_transit_quantity'=>$in_transit_quantity,
':updated_at'=>$time])->execute();
< /code>
Моя транзакция 2 специфична для пункта, где и в транзакции 1 Я не использовал какую -либо таблицу инвентаризации (хотя отгрузка ребенка и отгрузка.
или другой случай, который, как я думал, это, возможно, оба транзакции не связаны с конкретным тупиком, но время так же. < /p>
Предложение об оптимизации запроса также будет оценен, если это может разрешить дело.

Подробнее здесь: https://stackoverflow.com/questions/793 ... y-restarti
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»