Página 1 de 1

DBI, Select for update

NotaPublicado: 2011-06-10 19:40 @861
por silva
Hola, estoy usando el módulo DBI, y quisiera hacer un select de un registro y mantenerlo lockeado mientras realizo otras operaciones, para luego ejecutarle un update al mismo.

¿Cómo puedo hacerlo usando DBI?

Gracias.

Re: DBI, Select for update

NotaPublicado: 2011-06-11 02:01 @125
por explorer
Yo creo que DBI no tiene esa opción. Al menos, en ninguna parte de la documentación aparece la palabra locked (bueno, sí, aparece una vez, pero es parte de un comentario, no de un comando).

En cambio, sí que se puede dar la orden de bloqueo al motor de la base de datos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $dbh->do("LOCK TABLES foo WRITE, bar READ");
  2. $sth->prepare("SELECT x,y,z FROM bar");
  3. $sth2->prepare("INSERT INTO foo SET a = ?");
  4. while (@ary = $sth->fetchrow_array()) {
  5.     $sth2->$execute($ary[0]);
  6.     }
  7. $sth2->finish();
  8. $sth->finish();
  9. $dbh->do("UNLOCK TABLES");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
(Ejemplo extraído desde aquí)

En este ejemplo, se indica que se debe bloquear la tabla bar para solo lectura, y la tabla foo para lectura y escritura. Mientras estén bloqueadas, solo nosotros podremos realizar esas operaciones.

De todas maneras, me parece que lo que quieres hacer es una transacción.