Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/01/2010, 11:16
matak
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 16 años, 5 meses
Puntos: 5
Transaccion con 2 bases de datos

Perdón, Transacción
Buenas amigos,

Les expongo mi caso haber si me pueden ayudar.

Tengo la base de datos I con la tabla J. Digamos que ésta es la principal
Luego tengo una base de datos X con la tabla Y. Digamos que ésta sería, por decirlo de alguna forma, auxiliar de I ya que en ésta almaceno archivos asociados a registros de la base de datos I

es decir:
- cada registro de la tabla I.J tiene asociado uno en la tabla X.Y que contiene el archivo asociado al registro de la tabla J

Lo hago así por esto de que el que manda manda aunque mande mal. El que manda se empeña en que tiene que estar asi para mantener la base de datos limpia,...

Son dos consultas por lo tanto para cubrir la posibilidad de que la segunda falle pense en hacer una transacción de la siguiente forma

Código PHP:
Ver original
  1. // conexion a Mysql por defecto la BD I
  2.  
  3.     $sql="SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED";
  4.     $consulta = mysql_query ($sql, $db);
  5.     if (!$consulta){
  6.       $sqlROLL = "ROLLBACK";
  7.       $consultaROLL = mysql_query ($sqlROLL, $db) or die (mysql_error($db));
  8.       exit();
  9.     }
  10.  
  11.     $sql = "BEGIN";
  12.     $consulta = mysql_query ($sql, $db);
  13.     if (!$consulta){
  14.       $sqlROLL = "ROLLBACK";
  15.       $consultaROLL = mysql_query ($sqlROLL, $db) or die (mysql_error($db));
  16.       exit();
  17.     }
  18. // Cambio a la base de datos X para insertar archivo
  19.     $status = mysql_select_db('X');
  20.     if (!$status){
  21.       $sqlROLL = "ROLLBACK";
  22.       $consultaROLL = mysql_query ($sqlROLL, $db) or die (mysql_error($db));
  23.       exit();
  24.     }
  25.  
  26.     // inserto el archivo
  27.     $sql = "INSERT INTO Y (...) VALUES (...)";
  28.     $consulta = mysql_query ($sql , $db);
  29.     if (!$consulta){
  30.  
  31.       $sqlROLL = "ROLLBACK";
  32.       $consultaROLL = mysql_query ($sqlROLL, $db) or die (mysql_error($db));
  33.       exit();
  34.     }
  35.     // Extraigo el id insertado
  36.     $keyCarta = mysql_insert_id($db);
  37.  
  38. // Cambio a la base de datos I para insertar registro y asociarle el archivo previamente insertado
  39.     $status = mysql_select_db('I');
  40.     if (!$status){
  41.       $sqlROLL = "ROLLBACK";
  42.       $consultaROLL = mysql_query ($sqlROLL, $db) or die (mysql_error($db));
  43.       exit();
  44.     }
  45.  
  46.     //Inserto registro y asocio archivo por medio del campo 'rel_y'
  47.     $sql = "INSERT INTO J (...,rel_y) VALUES (...,'$key')";
  48.     $consulta = mysql_query ($sql , $db);
  49.     if (!$consulta){
  50.       $sqlROLL = "ROLLBACK";
  51.       $consultaROLL = mysql_query ($sqlROLL, $db) or die (mysql_error($db));
  52.       exit();
  53.     }

Me da la sensación de que al hacer el cambio de base de datos pierdo la transacción. He hecho pruebas y fallando la segunda consulta de inserción me mantiene los cambios hechos en la primera

Gracias de antemano y espero me puedan ayudar pues soy novatillo en esto
__________________
Si quieres puedes y si puedes debes. Imposible is nothing!!!