tengo una tabla de recursos (digamos carros) que quiero afirmar atómicamente. Luego quiero información sobre qué recurso acabo de reclamar.cómo reclamar atómicamente una fila o recurso usando ACTUALIZAR en mysql
Si hay un límite de un recurso por un usuario, que pueda hacer el siguiente truco:
UPDATE cars SET user = 'bob' WHERE user IS NULL LIMIT 1
SELECT * FROM cars WHERE user = 'bob'
De esta manera, reclamo el recurso de forma atómica y luego puedo ver qué fila acabo reivindica.
Esto no funciona cuando 'bob' puede reclamar varios automóviles. Me doy cuenta de que puedo obtener una lista de los coches que ya ha reclamado Bob, reclamar otro, y luego SELECT
nuevamente para ver qué ha cambiado, pero eso me parece harto.
Lo que me pregunto es, ¿hay alguna forma de ver qué filas acabo de actualizar con mi última ACTUALIZACIÓN?
En su defecto, ¿hay algún otro truco para reclamar atómicamente una fila? Realmente quiero evitar el uso del nivel de aislamiento SERIALIZABLE
. Si hago algo como esto:
1 SELECT id FROM cars WHERE user IS NULL
2 <here, my PHP or whatever picks a car id>
3 UPDATE cars SET user = 'bob' WHERE id = <the one i picked>
habría REPEATABLE READ
ser suficiente aquí? En otras palabras, ¿podría garantizarse que algunas otras transacciones no reclamarán la fila que mi software seleccionó durante el paso 2?
encontré esto: http://stackoverflow.com/questions/1821142/atomically-mark-and-return-a-group-of-rows-in-database pero fue preguntado sobre el servidor SQL - no puedo encontrar un equivalente mySQL –