Foros del Web » Programando para Internet » PHP »

PHP tiene solución para este problema??

Estas en el tema de PHP tiene solución para este problema?? en el foro de PHP en Foros del Web. Hola, tengo una tabla con una clave primaria que se autoincrementa conforme se van añadiendo registros.Bien, pero esta tabla al ser accesible por varios ordenadores ...
  #1 (permalink)  
Antiguo 27/07/2003, 11:56
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
PHP tiene solución para este problema??

Hola, tengo una tabla con una clave primaria que se autoincrementa conforme se van añadiendo registros.Bien, pero esta tabla al ser accesible por varios ordenadores desde internet y estos ingresar registros en ella, puede darse la circunstancia de que dos claves primarias tengan el mismo valor.

Esto sucede asi, por que esa tabla es un recurso compartido, el cual se debe bloquear para que no surja ese problema de duplicidad que he comentado anteriormente.

Entonces, me interesaría saber si PHP tiene alguna forma de solucionar este problema, ya que dos registros con la misma clave primaria no se puede trabajar. De que forma bloquearía PHP esa tabla.

Gracias y un saludo.
  #2 (permalink)  
Antiguo 27/07/2003, 12:20
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
No sé si venga al caso hablar del siguiente tema, pero partiendo del concepto (FIFO, LIFO). Las peticiones realizados a los servidores en forma smultanea obedecen a este orden. Entonces no pueden llevarse acabo dos ordenes en forma simultanea (al mismo tiempo).

Creo que eso es suficiente para tu pregunta.

Saludos
  #3 (permalink)  
Antiguo 27/07/2003, 12:23
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
El sistema de bloqueo de tablas no depende de PHP, sino de tu motor de base de datos.

Que BD usas que te inserta dos ID iguales???

Hasta donde yo se, MySQL tiene bloqueo de tablas, así como postgre, SQL server, access, etc...

A menos que el "Autoincrement" sea simulado por tu script, en cuyo caso lo veo muy dificil. Solo debes marcar tu campo como indice primario, sin duplicados, autoincrementable, con eso no debes tener problemas.

__________________
Manoloweb
  #4 (permalink)  
Antiguo 27/07/2003, 12:30
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Hola, es Mysql, no no me ha insertado dos claves primarias iguales, pero es que me he puesto a pensar.....y me he dicho, que ocurre si va por la clave supongamos 00000233.

Llega una petición q lee q va por ese número y dice vale, me tendré q insertar con el 00000234, pero JUSTO antes de que este registro se inserte llega otra petición q lee el número 00000233(TODAVIA LA ANTERIOR NO SE HA INSERTADO) y ésta segunda dice, vale pues yo me tengo que insertar con el 00000234.

Se inserta la primera...
Se inserta la segunda...

Las dos con igual clave.

Mysql bloqueao toda petición hasta que la actual se lleve a cabo???????????

Un saludo y gracias.
  #5 (permalink)  
Antiguo 27/07/2003, 12:32
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Asi es, no tienes de que preocuparte...

Las BD se inventaron como recursos compartidos.
__________________
Manoloweb
  #6 (permalink)  
Antiguo 27/07/2003, 12:37
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Bueno, creo que no entendieron erl enfoque anterior.

Dejemoslo ahi.

Saludos
  #7 (permalink)  
Antiguo 27/07/2003, 12:38
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Bien, pero en Access ese problema de duplicidad tengo entendido que existe y q se soluciona bloqueando desde ,por ejemplo, Visual Basic el registro y llevando los códigos aparte en otra tabla.

Un saludo y gracias por el interés.
  #8 (permalink)  
Antiguo 27/07/2003, 12:49
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Con respecto a tu última pregunta, básicamente los bloqueos se hacen al modificar registro, por lo mismo que la interacción en una aplicación, es distinto que la interacción en entorno web.

Saludos
  #9 (permalink)  
Antiguo 27/07/2003, 13:03
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
FIFO / LIFO

Entiendo el concepto, pero creo que este asunto no requería un enfoque tan profundo a nivel de las prioridades de requisición/respuesta en el servidor. Era un concepto de BD's muy simple.

Por cierto, para cultura general de aquellos que no conocen el termino:

FIFO: First In - First Out (el primero que entra es el primero que sale)
LIFO: Last In First Out (El ultimo en llegar es el primero que sale)

Esto tiene muchas aplicaciones, no solo a nivel sistemas, sino tambien a nivel logistica y programación industrial.

En sistemas se refieren al tratamiento que reciben las peticiones conforme van llegando, en otras palabras, NO atienden al segundo mientras no hayan terminado con el primero...

__________________
Manoloweb
  #10 (permalink)  
Antiguo 27/07/2003, 13:11
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 20 años, 9 meses
Puntos: 0
Gracias por haberme aclarado la duda.


Un saludo y gracias.
  #11 (permalink)  
Antiguo 27/07/2003, 13:48
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Muy buena la ampliación Manolo.


Saludos
  #12 (permalink)  
Antiguo 27/07/2003, 14:05
 
Fecha de Ingreso: septiembre-2001
Ubicación: Monterrey
Mensajes: 663
Antigüedad: 22 años, 6 meses
Puntos: 6
Cita:
NO atienden al segundo mientras no hayan terminado con el primero...
A eso se referia biblio cuando hizo referencia a los terminos antes mencionados. Es decir que no puede haber dos peticiones iguales en un mismo instante de tiempo. Pero esto como comenta manolo es a nivel de prioridades en la peticion ya que eso no garantiza que dos INSERTS dupliquen valores en una tabla.

Es decir que si una transaccion A inserta el registro de clave primaria digamos 150 cuando termine de llevarse acabo esta peticion seguira otra pero nada me impide que esa otra transaccion tambien intente agregar un registro de llave primaria 150 con lo que se daria la duplicidad. Esto al menos si tomamos solo el concepto de FIFO. A un que se usa mas el termino de atomico (todo o nada ) en la jerga de base de datos.

A hora para evitar esto que es la duda que tenia dominguez, es que la base de datos o mas bien el gestor de base de datos sigue algunas reglas conocidas como restricciones para evitar problemas como el anterior, en este caso una que dice: que no puede haber dos registros diferentes con la misma llave primaria. mejor conocida como propiedad de unicidad. Ojo que esto no restringe que cualquier otra columna fuera de esta no contenga datos duplicados pero eso ya entra en otro tema.

Y esta regla se cumple independientemente del medio que se usa para acceder a la base de datos.

Por otro lado el uso especifico de bloqueo de tablas es un medio para simular transaccion u optimizar operaciones de actualizacion al menos en mysql. Donde una transaccion es una serie de opereaciones que queremos que se ejecuten como una sola (recuerden el concepto de atomico ). Pero esto es solo una parte de un problema mas complejo como lo es la tercia integridad referencial, concurrencia y recuperacion. de una base de datos.

Bueno ya me canse de marearlos, pero espero que esto aclare un poco las cosas y me haya echo entender y si no. Pues espero que alguien lo haga.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:37.