यद्यपि आप इसे सीधे_जॉइन के माध्यम से कर सकते हैं, आप उन पंक्तियों पर ताले भी स्पष्ट रूप से प्राप्त कर सकते हैं जिन्हें आप पहले प्राप्त करना चाहते हैं, उस पर अपडेट के लिए चयन ... को डुप्लिकेट करके आप चाहते हैं।
CREATE TEMPORARY TABLE colorsToUpdate (
colorID BIGINT(20) NOT NULL,
modelID BIGINT(20) NOT NULL
);
insert into colorsToUpdate ( colorID, modelID)
SELECT id, model_id
FROM colors
where id in (101, 105, 106);
#This will try to acquire lock on models
select m.* from models m
join colorsToUpdate c
on c.modelID = m.id
for UPDATE;
#this will try to get locks on models, and colors.
select m.*, c.*
from colorsToUpdate u
left join models m
on u.modelID = m.id
join colors c
on u.colorID = c.ID
order by m.id asc, c.id asc
for update;
# do your data modification here.
drop table colorsToUpdate;
चूंकि लॉकिंग कई चरणों में की जाती है, इसलिए जब आप अस्थायी तालिका सेट करते हैं और जब आप दो तालिकाओं पर ताले प्राप्त करना समाप्त कर लेते हैं, तो तालिका 'रंग' में प्रविष्टियों को संशोधित करना संभव होगा।
यह आपके लिए ठीक हो सकता है (यानी यदि आप केवल मौजूदा प्रविष्टियों को संशोधित करना चाहते हैं, जब लेन-देन शुरू होता है) लेकिन सूक्ष्म बग का कारण बन सकता है यदि यह वह नहीं है जो आप चाहते हैं।