|
Posted by Rik on 10/24/06 16:56
Chung Leong wrote:
>> Create an array of what to add, capture all existing items in
>> another array , then it's a simple question of array_diff() for
>> items that are invalid.
>>
>> Then create an array of already owned items, array_intersect() will
>> tell you what to update, the rest will have to be added.
> Then you end up with a race condition, I think even if a transaction
> is used. If there are two threads trying to insert the same data
> running simultaneously, a transaction would not block the second
> thread from fetching the same result set as the first. Thus both
> threads could
> think that a particular record doesn't exist and both would insert it.
> You would need to lock the table for the duration of the entire
> operation, which is pretty lousy.
My solution was purely to give him back the information he wants (he not
only wants to reject invalids, update already existing, and insert new, but
he wants to know which ones they are).
The actual updating can still be done with the previous simple replace
into, avoiding race condition.
--
Grtz,
Rik Wasmus
Navigation:
[Reply to this message]
|