Hay dos tablas:¿MySQL Query contiene subconsulta atómica?
Tabla 1 único Sesiones
ID Count
Tabla 2 (Sesiones)
ID Name
me gustaría actualizar count
sólo si name
no existe en sesiones para contar sesiones únicas, este es un ejemplo tan objetivo es no hacerlo de manera alternativa, sino que stion es:
Rowsaffected = Update table1
set Count = Count + 1
where (Select count(*) from table2 where Name = 'user1') = 0;
Insert into table2 (NAME) values('user');
¿La primera consulta es una consulta atómica? Si es así, entonces no hay problema.
En caso negativo, ¿Qué ocurre si hay múltiples hilos ejecutándose para realizar las operaciones mencionadas anteriormente? Existe la posibilidad de que:
Subproceso 1: el recuento devuelve 0, se actualizó la tabla 1 pero no la tabla 2 antes de que se inicie el Tema 2. Subproceso 2: encuentra el recuento 0, también va a actualizar el recuento.
Ahora para el mismo usuario, la cuenta es 2, lo que no debería ocurrir.
Cualquier sugerencia/comentario.
@Johan: ¿qué otro motor en MySQL admite transacciones? No conozco otros que InnoDB –
P. ej. NDBCluster, BDB – Johan
Estoy usando InnodDB, ¿quiere decir que la primera consulta es de naturaleza atómica, es decir, hasta que se complete la consulta, nadie más podrá leer esa tabla? – Navin